怎么在yii2项目中使用restful api进行授权验证

  介绍

这篇文章将为大家详细讲解有关怎么在yii2项目中使用restful api进行授权验证,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

& # 39;组件# 39;,=祝辞,(   ,& # 39;用户# 39;,=祝辞,(,   ,& # 39;identityClass& # 39;,=祝辞,& # 39;共同\ \用户模型# 39;   ,& # 39;enableAutoLogin& # 39;,=祝辞,真的,   ,& # 39;enableSession& # 39;,=祝辞,假的,   ,),   ,& # 39;urlManager& # 39;,=祝辞,(   ,& # 39;enablePrettyUrl& # 39;,=祝辞,真的,   ,& # 39;showScriptName& # 39;,=祝辞,假的,   ,& # 39;enableStrictParsing& # 39;,=祝辞,真的,   ,& # 39;规则# 39;,=祝辞,(   (才能   & # 39;才能类# 39;,=祝辞,& # 39;剩下yii \ \ UrlRule& # 39;   & # 39;才能控制器# 39;,=祝辞,[& # 39;v1/用户# 39;],   & # 39;才能extraPatterns& # 39;,=祝辞,(   ,,& # 39;POST 登录# 39;,=祝辞,& # 39;登录# 39;   ,,& # 39;GET  signup-test& # 39;,=祝辞,& # 39;signup-test& # 39;   ,,)   ,,,   ,)   ,),//,……   ],

signup-test操作我们后面添加测试用户,为登录操作提供便利。其他类型的操作后面看需要再做添加。

<>强认证类的选择

我们在<代码> api \控制器模块\ v1 \ \用户控件代码中设定的模型类指向<代码>常见\ \用户类模型,为了说明重点这里我们就不单独拿出来重写了,看各位需要,有必要的话再单独复制一个用户类到<代码> 下api \模型。

校验用户权限我们以<代码> yii \ \身份验证过滤器\ QueryParamAuth> use  yii \ \身份验证过滤器\ QueryParamAuth;      public  function 行为(),   {   ,return  ArrayHelper: merge (父:行为(),(,   & # 39;才能身份# 39;,=祝辞,(,   & # 39;才能类# 39;,=祝辞,QueryParamAuth::类名(),   ),才能   ,));   }

如此一来,那岂不是所有访问用户的操作都需要认证了?那不行,客户端第一个访问登录操作的时候哪来的令牌,<代码> yii \ \身份验证过滤器\ QueryParamAuth> public  function 行为(),   {   ,return  ArrayHelper: merge (父:行为(),(,   & # 39;才能身份# 39;,=祝辞,(,   & # 39;才能类# 39;,=祝辞,QueryParamAuth::类名(),   & # 39;才能选# 39;,=祝辞,(   ,,& # 39;登录# 39;   ,,& # 39;signup-test& # 39;   ,,,   ),才能   ,));   }

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

<强>添加测试用户

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

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

use 共同\ \用户模型;/* *   ,*添加测试用户   ,*/public  function  actionSignupTest  ()   {   ,user 美元;=,new 用户();   ,$ user→generateAuthKey ();   ,$ user→向setPassword (& # 39; 123456 & # 39;);   ,$ user→username =, & # 39; 111 & # 39;;   ,$ user→email =, & # 39; 111 @111.com& # 39;;   ,$ user→保存(假);      ,return  [   ,& # 39;代码# 39;,=在0   ,);   }

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

<>强登录操作

假设用户在客户端输入用户名和密码进行登录,服务端登录操作其实很简单,大部分的业务逻辑处理都在<代码> api模型\ \ loginForm>

使用api模型\ \ loginForm;

/* *   ,*登录   ,*/public  function  actionLogin  ()   {   ,model 美元;=,new  LoginForm;   美元,模型→setAttributes (Yii:应用程序→美元请求→post ());   ,if  (user 美元;=,美元模型→登录()),{   美元,if  (user  instanceof  IdentityInterface), {   return 才能;用户→美元api_token;   ,}else  {   return 才能;$ user→错误;   ,}   ,}else  {   ,return 模型→美元错误;   ,}   }

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

新建api \ \ LoginForm模型。PHP

& lt; PHP ?   namespace  api \模型;      use , Yii;   use  yii \基地\模型;   use 常见\ \用户模型;/* *   ,* Login 形式   ,*/class  LoginForm  extends 模型   {   美元,public 用户名;   美元,public 密码;      ,private  _user美元;      ,const  GET_API_TOKEN =, & # 39; generate_api_token& # 39;;      ,public  function  init  ()   ,{   ,父母:init ();   ,这个→美元(self:: GET_API_TOKEN,, ($ this, & # 39; onGenerateApiToken& # 39;]);   ,}/* *   ,* @inheritdoc   ,*对客户端表单数据进行验证的规则   ,*/,public  function 规则()   ,{   ,return  [   ,,[[& # 39;用户名# 39;,,& # 39;密码# 39;],,& # 39;需要# 39;],   ,,(& # 39;密码# 39;,,& # 39;validatePassword& # 39;],   ,);   ,}/* *   ,*自定义的密码认证方法   ,*/,public  function  validatePassword(属性,美元,美元params)   ,{   ,if  (! $ this→hasErrors ()), {   这个美元才能→_user =, $ this→getUser ();   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在yii2项目中使用restful api进行授权验证