PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集PHP建站技术分享-从入门到精通_各类知识收集

QQ:420220301 微信/手机:150-3210-7690
当前位置:首页 > CMS教程 > Fastadmin

fastadmin增加管理员注册功能

管理员 2024-12-14
Fastadmin
70

插件开发的目的是不影响主体程序,主体程序加了钩子,通过实现钩子的功能来扩展主体程序。后台管理员注册功能看样子是无法通过开发插件来实现吧,因此直接改主体程序:

一:applicationadmincontrollerIndex.php增加以下方法:

/**     * 管理员注册     */    public function register()    {        $url = $this->request->get('url', 'index/index');        if ($this->request->isPost()) {            //$this->token();            $params = [];            //$params = $this->request->post("row/a");            $params['username'] = $this->request->post("username");            $params['nickname'] = $this->request->post("username");            $params['password'] = $this->request->post("password");            $params['email'] = $this->request->post("email");            $captcha = $this->request->post('captcha');            $token = $this->request->post('__token__');            //验证数据            $rule = [                'username'  => 'require|length:3,30',                'password'  => 'require|length:6,30',                'email'     => 'require|email',                '__token__' => 'require|token',            ];            $msg = [                'username.require' => 'Username can not be empty',                'username.length'  => 'Username must be 3 to 30 characters',                'password.require' => 'Password can not be empty',                'password.length'  => 'Password must be 6 to 30 characters',                'email'            => 'Email is incorrect',            ];            $data = [                'username'  => $params['username'],                'password'  => $params['password'],                'email'     => $params['email'],                '__token__' => $token,            ];            $captchaResult = thinkValidate::is($captcha, 'captcha');            if (!$captchaResult) {                $this->error(__('Captcha is incorrect'));            }            $validate = new Validate($rule, $msg);            $result = $validate->check($data);            if (!$result) {                $this->error(__($validate->getError()), null, ['token' => $this->request->token()]);            }else {                $params['salt'] = fastRandom::alnum();                $params['password'] = md5(md5($params['password']) . $params['salt']);                $params['avatar'] = '/assets/img/avatar.png'; //设置新管理员默认头像。                $result = $this->model->save($params);                if ($result === false) {                    $this->error($this->model->getError());                }                //设置所属权限组                $group = [5];  //设置默认权限组                $dataset = [];                foreach ($group as $value) {                    $dataset[] = ['uid' => $this->model->id, 'group_id' => $value];                }                model('AuthGroupAccess')->saveAll($dataset);                $this->success(__('Sign up successful'), $url ? $url : url('index/index'));                //$this->success();            }            $this->error();        }        $background = Config::get('fastadmin.login_background');        $background = stripos($background, 'http') === 0 ? $background : config('site.cdnurl') . $background;        $this->view->assign('background', $background);        $this->view->assign('url', $url);        return $this->view->fetch();    }

二、public/assets/js/backend/index.js增加以下方法

register: function () {            //本地验证未通过时提示            $("#register-form").data("validator-options", validatoroptions);            //为表单绑定事件            Form.api.bindevent($("#register-form"), function (data, ret) {                setTimeout(function () {                    location.href = ret.url ? ret.url : "/";                }, 1000);            }, function (data) {                $("input[name=captcha]").next(".input-group-addon").find("img").trigger("click");            });        },

三:前端页面增加以下页面:
applicationadminviewindexregister.html

<!DOCTYPE html><html lang="{$config.language}">    <head>        {include file="common/meta" /}        <style type="text/css">            body {                color:#999;                background:url('{$background}');                background-size:cover;            }            a {                color:#fff;            }            .login-panel{margin-top:150px;}            .login-screen {                max-width:400px;                padding:0;                margin:100px auto 0 auto;            }            .login-screen .well {                border-radius: 3px;                -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);                box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);                background: rgba(255,255,255, 0.2);            }            .login-screen .copyright {                text-align: center;            }            @media(max-width:767px) {                .login-screen {                    padding:0 20px;                }            }            .profile-img-card {                width: 100px;                height: 100px;                margin: 10px auto;                display: block;                -moz-border-radius: 50%;                -webkit-border-radius: 50%;                border-radius: 50%;            }            .profile-name-card {                text-align: center;            }            #login-form {                margin-top:20px;            }            #login-form .input-group {                margin-bottom:15px;            }        </style>    </head>    <body>    <style>    .user-section {        background: #fff;        padding: 15px;        margin-bottom: 20px;        -webkit-border-radius: 4px;        -webkit-background-clip: padding-box;        -moz-border-radius: 4px;        -moz-background-clip: padding;        border-radius: 4px;        background-clip: padding-box;        border: 1px solid #e4ecf3;    }    .login-section {        margin: 50px auto;        width: 460px;        -webkit-border-radius: 0;        -webkit-background-clip: padding-box;        -moz-border-radius: 0;        -moz-background-clip: padding;        border-radius: 0;        background-clip: padding-box;    }    .login-section.login-section-weixin {        min-height: 315px;    }    .login-section .logon-tab {        margin: -15px -15px 0 -15px;    }    .login-section .logon-tab > a {        display: block;        padding: 20px;        float: left;        width: 50%;        font-size: 16px;        text-align: center;        color: #616161;        background-color: #f5f5f5;        -webkit-transition: all 0.3s ease;        -moz-transition: all 0.3s ease;        -o-transition: all 0.3s ease;        transition: all 0.3s ease;    }    .login-section .logon-tab > a:hover {        background-color: #fafafa;        -webkit-transition: all 0.3s ease;        -moz-transition: all 0.3s ease;        -o-transition: all 0.3s ease;        transition: all 0.3s ease;    }    .login-section .logon-tab > a.active {        background-color: #fff;        -webkit-transition: all 0.3s ease;        -moz-transition: all 0.3s ease;        -o-transition: all 0.3s ease;        transition: all 0.3s ease;    }    .login-section .login-main {        padding: 40px 45px 20px 45px;    }    .login-section .control-label {        font-size: 13px;    }    .login-section .n-bootstrap .form-group {        position: relative;    }    .login-section .n-bootstrap .input-group {        position: inherit;    }    .login-section .n-bootstrap .n-right {        margin-top: 0;        top: 0;        position: absolute;        left: 0;        text-align: right;        width: 100%;    }    .login-section .n-bootstrap .n-right .msg-wrap {        position: relative;    }</style>    <div id="content-container" class="container">        <div class="user-section login-section">            <div class="logon-tab clearfix"> <a href="{:url('index/login')}?url={$url|urlencode}">{:__('Sign in')}</a> <a class="active">{:__('Sign up')}</a> </div>            <div class="login-main">                <form name="form1" id="register-form" class="form-vertical" method="POST" action="">                    <input type="hidden" name="url" value="{$url}" />                    {:token()}                    <div class="form-group">                        <label class="control-label required">{:__('Email')}<span class="text-success"></span></label>                        <div class="controls">                            <input type="text" name="email" id="email" data-rule="required;email" class="form-control input-lg" placeholder="{:__('Email')}">                            <p class="help-block"></p>                        </div>                    </div>                    <div class="form-group">                        <label class="control-label">{:__('Username')}</label>                        <div class="controls">                            <input type="text" id="username" name="username" data-rule="required;username" class="form-control input-lg" placeholder="{:__('Username must be 3 to 30 characters')}">                            <p class="help-block"></p>                        </div>                    </div>                    <div class="form-group">                        <label class="control-label">{:__('Password')}</label>                        <div class="controls">                            <input type="password" id="password" name="password" data-rule="required;password" class="form-control input-lg" placeholder="{:__('Password must be 6 to 30 characters')}">                            <p class="help-block"></p>                        </div>                    </div>                    <div class="form-group">                        <label class="control-label">{:__('Mobile')}</label>                        <div class="controls">                            <input type="text" id="mobile" name="mobile" data-rule="required;mobile" class="form-control input-lg" placeholder="{:__('Mobile')}">                            <p class="help-block"></p>                        </div>                    </div>                    {if $config.fastadmin.login_captcha}                    <div class="input-group">                        <div class="input-group-addon"><span class="glyphicon glyphicon-option-horizontal" aria-hidden="true"></span></div>                        <input type="text" name="captcha" class="form-control" placeholder="{:__('Captcha')}" data-rule="{:__('Captcha')}:required;length(4)" />                        <span class="input-group-addon" style="padding:0;border:none;cursor:pointer;">                            <img src="{:rtrim('__PUBLIC__', '/')}/index.php?s=/captcha" width="100" height="30" onclick="this.src = '{:rtrim('__PUBLIC__', '/')}/index.php?s=/captcha&r=' + Math.random();"/>                        </span>                    </div>                    {/if}                    <div class="form-group">                        <button type="submit" class="btn btn-primary btn-lg btn-block">{:__('Sign up')}</button>                    </div>                </form>            </div>        </div>    </div>        {include file="common/script" /}    </body></html>

四、applicationadminviewindexlogin.html做如下修改

<!DOCTYPE html><html lang="{$config.language}">    <head>        {include file="common/meta" /}        <style type="text/css">            body {                color:#999;                background:url('{$background}');                background-size:cover;            }            a {                color:#fff;            }            .login-panel{margin-top:150px;}            .login-screen {                max-width:400px;                padding:0;                margin:100px auto 0 auto;            }            .login-screen .well {                border-radius: 3px;                -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);                box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);                background: rgba(255,255,255, 0.2);            }            .login-screen .copyright {                text-align: center;            }            @media(max-width:767px) {                .login-screen {                    padding:0 20px;                }            }            .profile-img-card {                width: 100px;                height: 100px;                margin: 10px auto;                display: block;                -moz-border-radius: 50%;                -webkit-border-radius: 50%;                border-radius: 50%;            }            .profile-name-card {                text-align: center;            }            #login-form {                margin-top:20px;            }            #login-form .input-group {                margin-bottom:15px;            }        </style>    </head>    <body><style>    .user-section {        background: #fff;        padding: 15px;        margin-bottom: 20px;        -webkit-border-radius: 4px;        -webkit-background-clip: padding-box;        -moz-border-radius: 4px;        -moz-background-clip: padding;        border-radius: 4px;        background-clip: padding-box;        border: 1px solid #e4ecf3;    }    .login-section {        margin: 50px auto;        width: 460px;        -webkit-border-radius: 0;        -webkit-background-clip: padding-box;        -moz-border-radius: 0;        -moz-background-clip: padding;        border-radius: 0;        background-clip: padding-box;    }    .login-section.login-section-weixin {        min-height: 315px;    }    .login-section .logon-tab {        margin: -15px -15px 0 -15px;    }    .login-section .logon-tab > a {        display: block;        padding: 20px;        float: left;        width: 50%;        font-size: 16px;        text-align: center;        color: #616161;        background-color: #f5f5f5;        -webkit-transition: all 0.3s ease;        -moz-transition: all 0.3s ease;        -o-transition: all 0.3s ease;        transition: all 0.3s ease;    }    .login-section .logon-tab > a:hover {        background-color: #fafafa;        -webkit-transition: all 0.3s ease;        -moz-transition: all 0.3s ease;        -o-transition: all 0.3s ease;        transition: all 0.3s ease;    }    .login-section .logon-tab > a.active {        background-color: #fff;        -webkit-transition: all 0.3s ease;        -moz-transition: all 0.3s ease;        -o-transition: all 0.3s ease;        transition: all 0.3s ease;    }    .login-section .login-main {        padding: 40px 45px 20px 45px;    }    .login-section .control-label {        font-size: 13px;    }    .login-section .n-bootstrap .form-group {        position: relative;    }    .login-section .n-bootstrap .input-group {        position: inherit;    }    .login-section .n-bootstrap .n-right {        margin-top: 0;        top: 0;        position: absolute;        left: 0;        text-align: right;        width: 100%;    }    .login-section .n-bootstrap .n-right .msg-wrap {        position: relative;    }</style>    <div id="content-container" class="container">        <div class="user-section login-section">            <div class="logon-tab clearfix"> <a class="active">{:__('Sign in')}</a> <a href="{:url('index/register')}?url={$url|urlencode}">{:__('Sign up')}</a> </div>            <div class="login-main">                <form name="form" id="login-form" class="form-vertical" method="POST" action="">                    <input type="hidden" name="url" value="{$url}" />                    <div id="errtips" class="hide"></div>                    {:token()}                    <div class="form-group">                        <label class="control-label" for="account">{:__('Account')}</label>                        <div class="controls">                            <input class="form-control input-lg" id="pd-form-username" type="text" name="username" value="" data-rule="required" placeholder="{:__('Email/Mobile/Username')}" autocomplete="off">                            <div class="help-block"></div>                        </div>                    </div>                    <div class="form-group">                        <label class="control-label" for="password">{:__('Password')}</label>                        <div class="controls">                            <input class="form-control input-lg" id="pd-form-password" type="password" name="password" data-rule="required;password" placeholder="{:__('Password')}" autocomplete="off">                        </div>                    </div>                    {if $config.fastadmin.login_captcha}                    <div class="input-group">                        <div class="input-group-addon"><span class="glyphicon glyphicon-option-horizontal" aria-hidden="true"></span></div>                        <input type="text" name="captcha" class="form-control" placeholder="{:__('Captcha')}" data-rule="{:__('Captcha')}:required;length(4)" />                        <span class="input-group-addon" style="padding:0;border:none;cursor:pointer;">                            <img src="{:rtrim('__PUBLIC__', '/')}/index.php?s=/captcha" width="100" height="30" onclick="this.src = '{:rtrim('__PUBLIC__', '/')}/index.php?s=/captcha&r=' + Math.random();"/>                        </span>                    </div>                    {/if}                    <div class="form-group">                        <label class="inline" for="keeplogin">                            <input type="checkbox" name="keeplogin" id="keeplogin" value="1" />                            {:__('Keep login')}                        </label>                    </div>                    <div class="form-group">                        <button type="submit" class="btn btn-primary btn-lg btn-block">{:__('Sign in')}</button>                    </div>                </form>            </div>        </div>    </div>        {include file="common/script" /}    </body></html>

至此后台注册管理员的功能实现,欢迎各位小伙伴指正不足的地方。



希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, LeCMS, ClassCMS, Fastadmin, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。

相关推荐

扫码关注

qrcode

QQ交谈

回顶部