前端登录不成功

来源:6-2 会员中心功能实现

xx99933

2017-05-15

老师,为什么我前端登录的时候,页面没有跳转,右上角也没用户名的显示。进行登录验证的时候,用户名和密码不一致也没有报错提示

写回答

4回答

Jason

2017-05-15

你这样,在登陆方法中提交后打印model->geterrors()看看

0
0

Jason

2017-05-15

代码贴出来看看

0
0

xx99933

提问者

2017-05-15

问题解决了,谢谢老师

0
1
Jason
恩,好的
2017-05-15
共1条回复

xx99933

提问者

2017-05-15

memberController.php

<?php

namespace app\controllers;

use app\controllers\CommonController;

use app\models\User;

use Yii;


class MemberController extends CommonController

{

    public function actionAuth()

    {

        $this->layout = 'layout2';

        $model = new User;

        if (Yii::$app->request->isPost) {

            $post = Yii::$app->request->post();

            if ($model->login($post)) {

                // $url = Yii::$app->session->getFlash('referrer');


                // return $this->redirect($url);

                return $this->goBack(Yii::$app->request->referrer);

            }

        }


        return $this->render("auth", ['model' => $model]);

    }


    public function actionLogout()

    {   

        Yii::$app->session->remove('loginName');

        Yii::$app->session->remove('isLogin');

        if (!isset(Yii::$app->session['isLogin'])) {

            return $this->goBack(Yii::$app->request->referrer);

        }

    }


    public function actionReg()

    {

        $model = new User;

        if (Yii::$app->request->isPost) {

            $post = Yii::$app->request->post();

            if ($model->regByMail($post)) {

                Yii::$app->session->setFlash('info', '电子邮件发送成功');

            }

        }

        $this->layout = 'layout2';

        return $this->render('auth', ['model' => $model]);

    }


    public function actionQqlogin()

    {

        require_once("../vendor/qqlogin/qqConnectAPI.php");

        $qc = new \QC();

        $qc->qq_login();

    }


    public function actionQqcallback()

    {

        require_once("../vendor/qqlogin/qqConnectAPI.php");

        $auth = new \OAuth();

        $accessToken = $auth->qq_callback();

        $openid = $auth->get_openid();

        $qc = new \QC($accessToken, $openid);

        $userinfo = $qc->get_user_info();

        $session = Yii::$app->session;

        $session['userinfo'] = $userinfo;

        $session['openid'] = $openid;

        if ($model = User::find()->where('openid = :openid', [':openid' => $openid])->one()) {

            $session['loginName'] = $model->userName;

            $session['isLogin'] = 1;

            return $this->redirect(['index/index']);

        }

        return $this->redirect(['member/qqreg']);

    }


    public function actionQqreg()

    {

        $this->layout = "layout2";

        $model = new User;

        if (Yii::$app->request->isPost) {

            $post = Yii::$app->request->post();

            $session = Yii::$app->session;

            $post['User']['openid'] = $session['openid'];

            if ($model->reg($post, 'qqreg')) {

                $session['loginName'] = $post['User']['userName'];

                $session['isLogin'] = 1;

                return $this->redirect(['index/index']);

            }

        }

        return $this->render('qqreg', ['model' => $model]);

    }

}

user.php

<?php

namespace app\models;

use yii\db\ActiveRecord;

use app\models\User;

use Yii;


class User extends ActiveRecord{

    

    public $repass;    //确认密码

    public $loginName; //用户名/电子邮箱

    public $rememberMe = true; //记住我

    

    public static function tableName() {

        return "{{%user}}";

    }

    

    /**

     * 创建属性标签

     */

    public function attributeLabels() {

        return [

            'userName' => '用户名',

            'userPass' => '用户密码',

            'repass' => '确认密码',

            'userEmail' => '电子邮箱',

            'loginName' => '用户名/电子邮箱',

        ];

    }

    

    public function rules(){

        return [

            ['loginName', 'required', 'message' => '登录用户名不能为空', 'on' => ['login']],

            ['userName', 'required', 'message' => '用户名不能为空', 'on' => ['reg','login', 'regbymail']],

            ['userName', 'unique', 'message' => '用户名已经被注册', 'on' => ['reg', 'regbymail']],

            ['userEmail', 'required', 'message' => '电子邮箱不能为空', 'on' => ['reg', 'regbymail']],

            ['userEmail', 'email', 'message' => '电子邮箱格式不正确', 'on' => ['reg', 'regbymail']],

            ['userEmail', 'unique', 'message' => '电子邮箱已被注册', 'on' => ['reg', 'regbymail']],

            ['userPass', 'required', 'message' => '用户密码不能为空', 'on' => ['reg', 'login', 'regbymail']],

            ['userPass', 'validatePass', 'on' => ['login']],

            ['repass', 'required', 'message' => '确认密码不能为空', 'on' => ['reg']],

            ['repass', 'compare', 'compareAttribute' => 'repass', 'message' => '两次密码输入不一致', 'on' => ['reg']],

        ];

    }

    

    /**

     * 前台登录验证密码

     */

    public function validatePass(){

        if(!$this->hasErrors()){

            $loginName = "userName";

            if (preg_match('/@/', $this->loginName)){

                $loginName = "userEmail";

            }

            $data = self::find()->where($loginName.' = :loginName and userPass = :pass', [':loginName' => $this->loginName, ':pass' => md5($this->userPass)])->one();

            if (is_null($data)){

                $this->addError("userPass", "用户名或密码错误");

            }

        }

    }

    

    /**

     * 后台添加新用户

     * @param type $data

     * @param type $scenario

     * @return boolean

     */

    public function reg($data, $scenario = 'reg'){

        $this->scenario = $scenario;

        if ($this->load($data) && $this->validate()){

            $this->createTime = time();

            $this->userPass = md5($this->userPass);

            if($this->save(false)){

                return true;

            }

            return false;

        }

        return false;

    }

    

    //根据用户表userid获取关联表o

   public function getProfile(){

        return $this->hasOne(Profile::className(), ['userId' => 'userId']);

    }

    /*

     *

     * 前台用户登录,信息写入SESSION

     * @param type $data

     * @return boolean*/

     

    public function login($data){

        $this->scenario = "login";

        if ($this->load($data) && $this->validate()){

            //把用户信息写入SESSION

            $lifetime = $this->rememberMe ? 24*3600 : 0;

            $session = Yii::$app->session;

            session_set_cookie_params($lifetime);

            

            $session['loginName'] = $this->loginName;

            $session['isLogin'] = 1;

            return (bool)$session['isLogin'];

        }

        return false;

    }

  

    /**

     * 通过邮箱注册,发送邮件告知用户名和密码

     * @param type $data

     * @return boolean

     */

    public function regByMail($data){

        $this->scenario = 'regbymail';

        $data['User']['userName'] = 'go_lifeMall'.uniqid();

        $data['User']['userPass'] = uniqid();

        if($this->load($data) && $this->validate()){

            $mailer = Yii::$app->mailer->compose('createuser', ['userPass' => $data['User']['userPass'], 'userName' => $data['User']['userName']]);

            $mailer->setFrom('myMall@163.com');

            $mailer->setTo($data['User']['userEmail']);

            $mailer->setSubject('商城-新建用户');

            if ($mailer->send() && $this->reg($data, 'regbymail')){//发送邮件,并把新生成的用户名和密码以及前台传过来的注册邮箱添加进用户表

                return true;

            }

        }

        return false;

    }

}

auth.php

<?php $form = ActiveForm::begin([

                        'fieldConfig' => [

                            'template' => '<div class="field-row">{label}{input}</div>{error}'

                        ],

                        'options' => [

                            'class' => 'login-form cf-style-1',

                            'role' => 'form',

                        ],

                        'action' => ['member/auth'],

                    ]); ?>

                        <?php echo $form->field($model, 'loginName')->textInput(['class' => 'le-input']); ?>

                        <?php echo $form->field($model, 'userPass')->passwordInput(['class' => 'le-input']); ?>

                        <div class="field-row clearfix">

                        <?php echo $form->field($model, 'rememberMe')->checkbox([

                            'template' => '<span class="pull-left"><label class="content-color">{input} <span class="bold">记住我</span></label></span>',

                            'class' => "le-checkbox auto-width inline",

                        ]); ?>

                            <span class="pull-right">

                                <a href="#" class="content-color bold">忘记密码 ?</a>

                            </span>

                        </div>


                        <div class="buttons-holder">

                            <?php echo Html::submitButton('安全登录', ['class' => 'le-button huge']); ?>

                        </div><!-- /.buttons-holder -->

 <?php ActiveForm::end(); ?><!-- /.cf-style-1 -->


layout2.php

<ul>

                <li><a href="<?php echo yii\helpers\Url::to(['index/index']) ?>">首页</a></li>

                <?php if (\Yii::$app->session['isLogin'] == 1): ?>

                <li><a href="<?php echo yii\helpers\Url::to(['cart/index']) ?>">我的购物车</a></li>

                <li><a href="<?php echo yii\helpers\Url::to(['order/index']) ?>">我的订单</a></li>

                <?php endif; ?>

            </ul>

        </div><!-- /.col -->

        

        <div class="col-xs-12 col-sm-6 no-margin">

            <ul class="right">

            <?php if (\Yii::$app->session['isLogin'] == 1): ?>

                您好 , 欢迎您回来 <?php echo \Yii::$app->session['loginName']; ?> , <a href="<?php echo yii\helpers\Url::to(['member/logout']); ?>">退出</a>

            <?php else: ?>

                <li><a href="<?php echo yii\helpers\Url::to(['member/auth']); ?>">注册</a></li>

                <li><a href="<?php echo yii\helpers\Url::to(['member/auth']); ?>">登录</a></li>

            <?php endif; ?>

  </ul>



0
0

Yii2.0开发一个仿京东商城平台

【毕设】购物、下单、支付、收货...各功能模块开发,打造京东式电商平台

1543 学习 · 655 问题

查看课程