Cette fois, je vais vous apporter une explication détaillée de la vérification de l'autorisation de yii2 resetful. Quelles sont les précautions pour la vérification de l'autorisation de yii2 resetful. Ce qui suit est un cas pratique, jetons un coup d'oeil.
Qu'est-ce qu'une API de style reposant ? Nous avons déjà écrit un grand article pour présenter ses concepts et ses opérations de base.
Maintenant que je l’ai écrit, que veux-tu dire aujourd’hui ?
Cet article est principalement écrit pour le déploiement d'API dans des scénarios réels.
Aujourd'hui, nous allons parler des problèmes de vérification d'autorisation rencontrés par les API dans ces années-là ! Ouvrage exclusif, si vous bénéficiez de sa lecture, n'oubliez pas de me donner un like.
Analyse commerciale
Comprenons d'abord toute la logique
1 L'utilisateur remplit le formulaire de connexion sur le client
2. demandes du clientInterface de connexionconnexion
3 Le serveur vérifie le compte et le mot de passe de l'utilisateur et renvoie un jeton valide au client
4 Le client obtient le jeton de l'utilisateur et le stocke sur le client. , par exemple Dans le cookie
5. Le client porte le token pour accéder à l'interface qui doit être vérifiée, comme l'interface pour obtenir les informations personnelles de l'utilisateur
6. Le serveur vérifie la validité du token, et la vérification réussit. Quoi qu'il en soit, les informations requises par le client sont renvoyées et la vérification Si la vérification échoue, l'utilisateur doit se reconnecter
Dans cet article, nous utilisons Connexion utilisateur pour obtenir les informations personnelles de l'utilisateur à titre d'exemple pour donner une explication détaillée et complète.
Ce qui précède est au centre de cet article. Ne soyez pas encore excité ou nerveux. Après l'avoir analysé, nous procéderons étape par étape avec les détails.
1. Vous devriez avoir une application API
2. Pour le client, nous allons utiliser postman pour la simulation. navigateur Le serveur n'a pas installé postman, veuillez d'abord le télécharger vous-même
3. La table utilisateur à tester doit avoir un champ api_token. Sinon, veuillez d'abord l'ajouter vous-même et assurez-vous que le champ est suffisamment long 4. L'application API a activé le routage Beautify, et configurez d'abord l'opération de connexion de type post et l'opération de test d'inscription de type get
5 Fermez la session de session du composant utilisateur
'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', ] ], ] ], // ...... ],
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中文网其它相关文章!
推荐阅读:
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!