yii2 restful api授权验证

前言

什么是restful风格的api呢?我们之前有写过大篇的文章来介绍其概念以及基本操作。

既然写过了,那今天是要说点什么吗?

这篇文章主要针对实际场景中api的部署来写。

我们今天就来大大的侃侃那些年api遇到的授权验证问题!独家干活,如果看完有所受益,记得不要忘记给我点赞哦。

业务分析

我们先来了解一下整个逻辑

  • 用户在客户端填写登录表单
  • 用户提交表单,客户端请求登录接口login
  • 服务端校验用户的帐号密码,并返回一个有效的token给客户端
  • 客户端拿到用户的token,将之存储在客户端比如cookie中
  • 客户端携带token访问需要校验的接口比如获取用户个人信息接口
  • 服务端校验token的有效性,校验通过,反正返回客户端需要的信息,校验失败,需要用户重新登录

本文我们以用户登录,获取用户的个人信息为例进行详细的完整版说明。
以上,便是我们本篇文章要实现的重点。先别激动,也别紧张,分析好了之后,细节部分我们再一步一个脚印走下去。

准备工作

  • 你应该有一个api应用,如果你还没有,请先移步这里→_→Restful api基础
  • 对于客户端,我们准备采用postman进行模拟,如果你的google浏览器还没有安装postman,请先自行下载
  • 要测试的用户表需要有一个api_token的字段,没有的请先自行添加,并保证该字段足够长度
  • api应用开启了路由美化,并先配置post类型的login操作和get类型的signup-test操作
  • 关闭了user组件的session会话

关于上面准备工作的第4点和第5点,我们贴一下代码方便理解

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

'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',

  ]

  ],

 ]

 ],

 // ......

],

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

认证类的选择

我们在api\modules\v1\controllers\UserController中设定的model类指向 common\models\User类,为了说明重点这里我们就不单独拿出来重写了,看各位需要,有必要的话再单独copy一个User类到api\models下。

校验用户权限我们以 yii\filters\auth\QueryParamAuth 为例

1

2

3

4

5

6

7

8

9

10

use yii\filters\auth\QueryParamAuth;

 

public function behaviors()

{

 return ArrayHelper::merge (parent::behaviors(), [

  'authenticator' => [

  'class' => QueryParamAuth::className()

  ]

 ] );

}

如此一来,那岂不是所有访问user的操作都需要认证了?那不行,客户端第一个访问login操作的时候哪来的token,yii\filters\auth\QueryParamAuth对外提供一个属性,用于过滤不需要验证的action。我们将UserController的behaviors方法稍作修改

1

2

3

4

5

6

7

8

9

10

11

12

public function behaviors()

{

 return ArrayHelper::merge (parent::behaviors(), [

  'authenticator' => [

  'class' => QueryParamAuth::className(),

  'optional' => [

   'login',

   'signup-test'

  ],

  ]

 ] );

}

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

添加测试用户

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

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

1

2

3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值