前言
什么是restful风格的api呢?我们之前有写过大篇的文章来介绍其概念以及基本操作。
既然写过了,那今天是要说点什么吗?
这篇文章主要针对实际场景中api的部署来写。
我们今天就来大大的侃侃那些年api遇到的授权验证问题!独家干活,如果看完有所受益,记得不要忘记给我点赞哦。
业务分析
我们先来了解一下整个逻辑
本文我们以用户登录,获取用户的个人信息为例进行详细的完整版说明。
以上,便是我们本篇文章要实现的重点。先别激动,也别紧张,分析好了之后,细节部分我们再一步一个脚印走下去。
准备工作
关于上面准备工作的第4点和第5点,我们贴一下代码方便理解
'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 为例
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方法稍作修改
public function behaviors()
{
return ArrayHelper::merge (parent::behaviors(), [
'authenticator' => [
'class' => QueryParamAuth::className(),
'optional' => [
'login',
'signup-test'
],
]
] );
}
这样login操作就无需权限验证即可访问了。
添加测试用户
为了避免让客户端登录失败,我们先写一个简单的方法,往user表里面插入两条数据,便于接下来的校验。
UserController增加signupTest操作,注意此方法不属于讲解范围之内,我们仅用于方便测试。
use common\models\User;
/**
* 添加测试用户
*/
public function actionSignupTest ()
{
$user = new User();
$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的实现
Yii2中的场景(scenario)和验证规则(rule)详解Yii2的rule用于对模型属性进行验证,scenario用户定义不同场景下需要验证的模型,下面这篇文章主要给大家介绍了关于
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势本篇文章主要介绍了浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势,具有一定的参考价值,感兴趣的小伙伴们可以
Yii2中组件的注册与创建方法这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
Yii2使用驼峰命名的形式访问控制器的示例代码这篇文章主要介绍了Yii2使用驼峰命名的形式访问控制器的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参
Yii2使用驼峰命名的形式访问控制器(实例讲解)下面小编就为大家带来一篇Yii2使用驼峰命名的形式访问控制器(实例讲解)。小编觉得挺不错的,现在就分享给大家,
Yii2.0实现生成二维码功能实例这篇文章主要介绍了Yii2.0实现生成二维码功能,结合实例形式分析了Yii2.0框架生成二维码所涉及的相关扩展引入步骤与