前端登录不成功
来源:6-2 会员中心功能实现
xx99933
2017-05-15
老师,为什么我前端登录的时候,页面没有跳转,右上角也没用户名的显示。进行登录验证的时候,用户名和密码不一致也没有报错提示
4回答
-
Jason
2017-05-15
你这样,在登陆方法中提交后打印model->geterrors()看看
00 -
Jason
2017-05-15
代码贴出来看看
00 -
xx99933
提问者
2017-05-15
问题解决了,谢谢老师
012017-05-15 -
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>
00
相似问题