Heim >Backend-Entwicklung >PHP-Tutorial >Autorisierungsüberprüfung von yii2 zurückgesetzt

Autorisierungsüberprüfung von yii2 zurückgesetzt

不言
不言Original
2018-04-19 14:13:171641Durchsuche

Was ist eine Restful-Style-API? Wir haben bereits einen großen Artikel geschrieben, um seine Konzepte und grundlegenden Operationen vorzustellen.

Was möchten Sie heute sagen, nachdem ich es geschrieben habe?

Dieser Artikel ist hauptsächlich für die Bereitstellung von APIs in tatsächlichen Szenarien geschrieben.

Heute werden wir über die Probleme bei der Autorisierungsüberprüfung sprechen, auf die APIs in diesen Jahren gestoßen sind! Exklusives Werk. Wenn Sie von der Lektüre profitieren, vergessen Sie bitte nicht, mir ein „Gefällt mir“ zu geben.

Geschäftsanalyse

Lassen Sie uns zunächst die gesamte Logik verstehen

1 Der Benutzer füllt das Anmeldeformular auf dem Client aus
Der Benutzer sendet das Formular ab Der Client fordert die Anmeldung an der Anmeldeschnittstelle an
3. Der Server überprüft das Konto und das Passwort des Benutzers und gibt ein gültiges Token an den Client zurück
4 Der Client erhält das Token des Benutzers und speichert es im Client
5. Der Client trägt das Token, um auf Schnittstellen zuzugreifen, die überprüft werden müssen, z. B. die Schnittstelle zum Abrufen persönlicher Benutzerinformationen.
6. Der Server überprüft die Gültigkeit des Tokens und die Überprüfung ist erfolgreich Wenn die Überprüfung fehlschlägt, muss der Benutzer erneut versuchen, sich anzumelden.

In diesem Artikel nehmen wir die Benutzeranmeldung und die persönlichen Daten des Benutzers als Beispiel, um eine detaillierte und vollständige Erklärung zu geben.

Das Obige steht im Mittelpunkt dieses Artikels. Seien Sie noch nicht aufgeregt oder nervös. Nach der Analyse gehen wir Schritt für Schritt mit den Details fort.

Vorbereitungsarbeiten

Sie sollten über eine API-Anwendung verfügen.
Für den Client verwenden wir Postman zur Simulation. Wenn Ihr Google-Browser Postman nicht installiert hat, tun Sie dies bitte Laden Sie zuerst selbst herunter
3. Die zu testende Benutzertabelle muss über ein api_token-Feld verfügen. Wenn nicht, fügen Sie es bitte zuerst selbst hinzu und stellen Sie sicher, dass das Feld lang genug ist
4. Die API-Anwendung ermöglicht die Routenverschönerung und konfiguriert Geben Sie zuerst den Vorgang ein und erhalten Sie den Vorgang zum Anmelden und Testen
5. Schließen Sie die Sitzungssitzung der Benutzerkomponente.

In Bezug auf den 4. und 5. Punkt der oben genannten Vorbereitungen veröffentlichen wir den Code zum leichteren Verständnis

'components'=> [
 'user'=> [ 
  'identityClass'=>'common\models\User',
  'enableAutoLogin'=> true,
  'enableSession'=> false,
 ],
 'urlManager'=> [
  'enablePrettyUrl'=> true,
  'showScriptName'=> false,
  'enableStrictParsing'=> true,
  'rules'=> [
   [
    'class'=>'yii\rest\UrlRule',
    'controller'=> ['v1/user'],
    'extraPatterns'=> [
     'POST login'=>'login',
     'GET signup-test'=>'signup-test',
    ]
   ],
  ]
 ],
 // ......
],

Im Anmeldetestvorgang werden wir später einen Testbenutzer hinzufügen, um den Anmeldevorgang zu erleichtern. Andere Arten von Operationen müssen später hinzugefügt werden.

Auswahl der Authentifizierungsklasse

Die Modellklasse, die wir in apimodulesv1controllersUserController festlegen, verweist auf die commonmodelsUser-Klasse. Um die wichtigsten Punkte zu veranschaulichen, werden wir sie hier nicht separat umschreiben . Bei Bedarf kopieren Sie dann eine Benutzerklasse separat nach apimodels.

Um Benutzerberechtigungen zu überprüfen, nehmen wir yiifiltersauthQueryParamAuth als Beispiel

useyii\filters\auth\QueryParamAuth;
  
publicfunctionbehaviors() 
{
 returnArrayHelper::merge (parent::behaviors(), [ 
   'authenticator'=> [ 
    'class'=> QueryParamAuth::className() 
   ] 
 ] );
}

Würden in diesem Fall nicht alle Vorgänge, die auf den Benutzer zugreifen, eine Authentifizierung erfordern? Das funktioniert nicht. Woher kommt das Token, wenn der Client zum ersten Mal auf den Anmeldevorgang zugreift? Wir ändern die Verhaltensmethode von UserController

leicht
publicfunctionbehaviors() 
{
 returnArrayHelper::merge (parent::behaviors(), [ 
   'authenticator'=> [ 
    'class'=> QueryParamAuth::className(),
    'optional'=> [
     'login',
     'signup-test'
    ],
   ] 
 ] );
}

这样login操作就无需权限验证即可访问了。

添加测试用户

为了避免让客户端登录失败,我们先写一个简单的方法,往user表里面插入两条数据,便于接下来的校验。 

UserController增加signupTest操作,注意此方法不属于讲解范围之内,我们仅用于方便测试。

usecommon\models\User;
/**
 * 添加测试用户
 */
publicfunctionactionSignupTest ()
{
 $user=newUser();
 $user->generateAuthKey();
 $user->setPassword('123456');
 $user->username ='111';
 $user->email ='111@111.com';
 $user->save(false);
  
 return[
  'code'=> 0
 ];
}

如上,我们添加了一个username是111,密码是123456的用户

登录操作

假设用户在客户端输入用户名和密码进行登录,服务端login操作其实很简单,大部分的业务逻辑处理都在api\models\loginForm上,来先看看login的实现

useapi\models\LoginForm;
  
/**
 * 登录
 */
publicfunctionactionLogin ()
{
 $model=newLoginForm;
 $model->setAttributes(Yii::$app->request->post());
 if($user=$model->login()) {
  if($userinstanceofIdentityInterface) {
   return$user->api_token;
  }else{
   return$user->errors;
  }
 }else{
  return$model->errors;
 }
}

登录成功后这里给客户端返回了用户的token,再来看看登录的具体逻辑的实现

新建api\models\LoginForm.PHP

<?php
namespaceapi\models;
  
useYii;
useyii\base\Model;
usecommon\models\User;
  
/**
 * Login form
 */
classLoginFormextendsModel
{
 public$username;
 public$password;
  
 private$_user;
  
 constGET_API_TOKEN =&#39;generate_api_token&#39;;
  
 publicfunctioninit ()
 {
  parent::init();
  $this->on(self::GET_API_TOKEN, [$this,&#39;onGenerateApiToken&#39;]);
 }
  
  
 /**
  * @inheritdoc
  * 对客户端表单数据进行验证的rule
  */
 publicfunctionrules()
 {
  return[
   [[&#39;username&#39;,&#39;password&#39;],&#39;required&#39;],
   [&#39;password&#39;,&#39;validatePassword&#39;],
  ];

相关推荐:

Yii2.0 PHP使用Sphinx

Yii2 的控制台命令

Das obige ist der detaillierte Inhalt vonAutorisierungsüberprüfung von yii2 zurückgesetzt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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