Dieses Mal werde ich Ihnen eine detaillierte Erklärung der Autorisierungsüberprüfung von yii2 Resetful geben. Was sind die Vorsichtsmaßnahmen für die Autorisierungsüberprüfung von yii2 Resetful?
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äftsanalyseLassen Sie uns zunächst die gesamte Logik verstehen1 Der Benutzer füllt das Anmeldeformular auf dem Client ausDer Benutzer sendet das Formular ab Client-Anfragen
AnmeldeschnittstelleAnmeldung3. 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 auf dem Client , zum Beispiel Im Cookie
5. Der Client trägt das Token, um auf die Schnittstelle zuzugreifen, die überprüft werden muss, z. B. die Schnittstelle, um die persönlichen Informationen des Benutzers zu erhalten
6. Der Server überprüft die Gültigkeit des Tokens, und die Verifizierung ist erfolgreich. Die vom Kunden benötigten Informationen werden zurückgegeben und die Verifizierung schlägt fehl, der Benutzer muss sich erneut anmelden
Benutzeranmeldung um die persönlichen Daten des Benutzers als Beispiel zu erhalten, 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.
Sie sollten eine API-Anwendung haben
2. Für den Kunden verwenden wir Postman Browser Der Server hat Postman nicht installiert, bitte laden Sie es 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 hat Routing Beautify aktiviert und konfiguriert zunächst den Anmeldevorgang vom Typ „Beitrag“ und den Anmeldetest vom Typ „Get“
5. Schließen Sie die Sitzungssitzung der Benutzerkomponente
In Bezug auf den 4. und 5. Punkt der oben genannten Vorbereitungen: Wir fügen den Code ein, um das Verständnis zu erleichtern
'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', ] ], ] ], // ...... ],
Anmelde-Testvorgang Wir werden 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() ] ] ); }
如此一来,那岂不是所有访问user的操作都需要认证了?那不行,客户端第一个访问login操作的时候哪来的token,yii\filters\auth\QueryParamAuth对外提供一个属性,用于过滤不需要验证的action。我们将UserController的behaviors方法稍作修改
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 ='generate_api_token'; publicfunctioninit () { parent::init(); $this->on(self::GET_API_TOKEN, [$this,'onGenerateApiToken']); } /** * @inheritdoc * 对客户端表单数据进行验证的rule */ publicfunctionrules() { return[ [['username','password'],'required'], ['password','validatePassword'], ];
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Autorisierungsüberprüfung von yii2 resetful. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!