Heim > Backend-Entwicklung > PHP-Tutorial > Die Anmeldung in der Basisversion von Yii2 verwendet Yii::$app->user->login($user); es tritt ein Fehler auf

Die Anmeldung in der Basisversion von Yii2 verwendet Yii::$app->user->login($user); es tritt ein Fehler auf

WBOY
Freigeben: 2016-08-04 09:21:29
Original
2752 Leute haben es durchsucht

Yii2 basic版登录使用Yii::$app->user->login($user);出现错误Array to string conversion

  1. MyAuthenticationController.php

<code><?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\User;

class MyAuthenticationController extends Controller
{
    public function actionIndex()
    {
        echo 'login success'; exit;
    }
    public function actionLogin()
    {
        $error = null;
        $username = Yii::$app->request->post('username',null);
        $password = Yii::$app->request->post('password',null);

        $user = User::findOne(['username'=>$username]);

        if(($username!=null)&&($password!=null))
        {
            if($user!=null){
                if($user->validatePassword($password)){
                    $this->redirect(['index']);//这里可以实现重定向
//                    Yii::$app->user->login($user);这是源代码,但是会出现“Array to string conversion”的错误,暂时还没有解决,所以使用上面的重定向代码来转向指定登录成功的页面
                }else{
                    $error = 'Password validation failed';
                }
            }else{
                $error = 'User not found';
            }
        }
        return $this->render('login',['error'=>$error]);
    }

    public function actionLogout()
    {
        Yii::$app->user->logout();
        return $this->redirect(['login']);
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
  1. app\models\User.php

<code><?php

namespace app\models;

use Yii;
use yii\base\NotSupportedException;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;


class User extends ActiveRecord implements IdentityInterface
{
    public static function tableName()
    {
        return 'user';
    }


    /**
     * @inheritdoc
     */
    public static function findIdentity($id)
    {
        return static::findOne(['id'=>$id]);
    }

    /**
     * @inheritdoc
     */
    public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(['access_token'=>$token]);
    }

    /**
     * Finds user by username
     *
     * @param string $username
     * @return static|null
     */
    public static function findByUsername($username)
    {
        return static::findOne(['username'=>$username]);
    }

    /**
     * @inheritdoc
     */
    public function getId()
    {
        return $this->PrimaryKey();
    }

    /**
     * @inheritdoc
     */
    public function getAuthKey()
    {
        return $this->auth_Key;
    }

    /**
     * @inheritdoc
     */
    public function validateAuthKey($authKey)
    {
        return $this->getAuthKey() === $authKey;
    }

    /**
     * Validates password
     *
     * @param string $password password to validate
     * @return boolean if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password,$this->password_hash);
    }

    public function generateAuthKey()
    {
        $this->auth_key = Yii::$app->security->generateRandomKey();
    }

    public function beforeSave($insert)
    {
        if(parent::beforeSave($insert)){
            if($this->isNewRecord){
                $this->auth_key = \Yii::$app->security->generateRandomString();
            }
            return true;
        }
        return false;
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
  1. views\my-authentication\login.php

<code><?php
use \yii\bootstrap\ActiveForm;
use \yii\helpers\Html;
use \yii\bootstrap\Alert;
?>

<?php
if($error!=null){
    echo Alert::widget(['options'=>['class'=>'alert-danger'],'body'=>$error]);
};
?>

<?php if(Yii::$app->user->isGuest) { ?>
    <?php ActiveForm::begin() ?>

    <div class="form-group">
        <?php echo Html::label('Username','username'); ?>
        <?php echo Html::textInput('username','',['class'=>'form-control']);?>
    </div>

    <div class="form-group">
        <?php echo Html::label('Password','password'); ?>
        <?php echo Html::passwordInput('password','',['class'=>'form-control']); ?>
    </div>

    <?php echo Html::submitButton('Login',['class'=>'btn btn-primary']); ?>

    <?php ActiveForm::end(); ?>

<?php }  else {?>
    <h2>You are authentication!</h2>
    <br/><br/>
    <?php echo Html::a('logout',['my-authentication/logout'],['class'=>'btn btn-warning']); ?>
<?php } ?></code>
Nach dem Login kopieren
Nach dem Login kopieren
  1. SQL

<code>--
-- 表的结构 `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `auth_key` varchar(32) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `access_token` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- 转存表中的数据 `user`
--

INSERT INTO `user` (`id`, `username`, `auth_key`, `password_hash`, `access_token`) VALUES
(1, 'foo', '', '$2a$12$hL0rmIMjxhLqI.xr7jD1FugNWEgZNh62HuJj5.y34XBUfBWB4cppW', NULL);</code>
Nach dem Login kopieren
Nach dem Login kopieren

用户名是foo,密码是foopassword,登录后在Yii::$app->user->login($user);时出现错误,
Die Anmeldung in der Basisversion von Yii2 verwendet Yii::$app->user->login($user); es tritt ein Fehler auf

回复内容:

Yii2 basic版登录使用Yii::$app->user->login($user);出现错误Array to string conversion

  1. MyAuthenticationController.php

<code><?php

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\User;

class MyAuthenticationController extends Controller
{
    public function actionIndex()
    {
        echo 'login success'; exit;
    }
    public function actionLogin()
    {
        $error = null;
        $username = Yii::$app->request->post('username',null);
        $password = Yii::$app->request->post('password',null);

        $user = User::findOne(['username'=>$username]);

        if(($username!=null)&&($password!=null))
        {
            if($user!=null){
                if($user->validatePassword($password)){
                    $this->redirect(['index']);//这里可以实现重定向
//                    Yii::$app->user->login($user);这是源代码,但是会出现“Array to string conversion”的错误,暂时还没有解决,所以使用上面的重定向代码来转向指定登录成功的页面
                }else{
                    $error = 'Password validation failed';
                }
            }else{
                $error = 'User not found';
            }
        }
        return $this->render('login',['error'=>$error]);
    }

    public function actionLogout()
    {
        Yii::$app->user->logout();
        return $this->redirect(['login']);
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
  1. app\models\User.php

<code><?php

namespace app\models;

use Yii;
use yii\base\NotSupportedException;
use yii\db\ActiveRecord;
use yii\web\IdentityInterface;


class User extends ActiveRecord implements IdentityInterface
{
    public static function tableName()
    {
        return 'user';
    }


    /**
     * @inheritdoc
     */
    public static function findIdentity($id)
    {
        return static::findOne(['id'=>$id]);
    }

    /**
     * @inheritdoc
     */
    public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(['access_token'=>$token]);
    }

    /**
     * Finds user by username
     *
     * @param string $username
     * @return static|null
     */
    public static function findByUsername($username)
    {
        return static::findOne(['username'=>$username]);
    }

    /**
     * @inheritdoc
     */
    public function getId()
    {
        return $this->PrimaryKey();
    }

    /**
     * @inheritdoc
     */
    public function getAuthKey()
    {
        return $this->auth_Key;
    }

    /**
     * @inheritdoc
     */
    public function validateAuthKey($authKey)
    {
        return $this->getAuthKey() === $authKey;
    }

    /**
     * Validates password
     *
     * @param string $password password to validate
     * @return boolean if password provided is valid for current user
     */
    public function validatePassword($password)
    {
        return Yii::$app->security->validatePassword($password,$this->password_hash);
    }

    public function generateAuthKey()
    {
        $this->auth_key = Yii::$app->security->generateRandomKey();
    }

    public function beforeSave($insert)
    {
        if(parent::beforeSave($insert)){
            if($this->isNewRecord){
                $this->auth_key = \Yii::$app->security->generateRandomString();
            }
            return true;
        }
        return false;
    }
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
  1. views\my-authentication\login.php

<code><?php
use \yii\bootstrap\ActiveForm;
use \yii\helpers\Html;
use \yii\bootstrap\Alert;
?>

<?php
if($error!=null){
    echo Alert::widget(['options'=>['class'=>'alert-danger'],'body'=>$error]);
};
?>

<?php if(Yii::$app->user->isGuest) { ?>
    <?php ActiveForm::begin() ?>

    <div class="form-group">
        <?php echo Html::label('Username','username'); ?>
        <?php echo Html::textInput('username','',['class'=>'form-control']);?>
    </div>

    <div class="form-group">
        <?php echo Html::label('Password','password'); ?>
        <?php echo Html::passwordInput('password','',['class'=>'form-control']); ?>
    </div>

    <?php echo Html::submitButton('Login',['class'=>'btn btn-primary']); ?>

    <?php ActiveForm::end(); ?>

<?php }  else {?>
    <h2>You are authentication!</h2>
    <br/><br/>
    <?php echo Html::a('logout',['my-authentication/logout'],['class'=>'btn btn-warning']); ?>
<?php } ?></code>
Nach dem Login kopieren
Nach dem Login kopieren
  1. SQL

<code>--
-- 表的结构 `user`
--

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL,
  `auth_key` varchar(32) NOT NULL,
  `password_hash` varchar(255) NOT NULL,
  `access_token` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- 转存表中的数据 `user`
--

INSERT INTO `user` (`id`, `username`, `auth_key`, `password_hash`, `access_token`) VALUES
(1, 'foo', '', '$2a$12$hL0rmIMjxhLqI.xr7jD1FugNWEgZNh62HuJj5.y34XBUfBWB4cppW', NULL);</code>
Nach dem Login kopieren
Nach dem Login kopieren

用户名是foo,密码是foopassword,登录后在Yii::$app->user->login($user);时出现错误,
Die Anmeldung in der Basisversion von Yii2 verwendet Yii::$app->user->login($user); es tritt ein Fehler auf

<code>public function getId()
{
    return $this->getPrimaryKey();
}</code>
Nach dem Login kopieren

不是 PrimaryKey

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage