Nit*_*und 4 yii yii2 yii2-advanced-app
我正在yii2中实现Rest API.我想使用访问令牌对用户进行身份验证.我已经提到了各种SO答案如下
但我不清楚,我应该使用哪种身份验证方法以及如何获取用户身份.
我已findIdentityByAccessToken()按照Yii2 Rest指南中的建议在我的用户身份类中创建了方法.
以下是behaviour我的控制器中实现的
public function behaviors() {
$behaviors = parent::behaviors();
$behaviors['authenticator'] = [
'class' => HttpBasicAuth::className(),
'except' => ['login','forgot-password']
];
return $behaviors;
}
Run Code Online (Sandbox Code Playgroud)
现在,我将如何在控制器操作中获取用户身份?据我所知,访问令牌将从请求标头内的Web服务设置.
注意:我正在使用Yii2高级应用程序请帮帮我.
小智 7
简单回答,实现此行为的可能性不止一种.
双方HttpBearerAuth并HttpBasicAuth可以使用findIdentityByAccessToken()配置正确时梅索德.您应该使用的行为取决于您希望用户进行身份验证的方式.
如果你阅读了HttpBasisAuth HttpBasicAuth的文档,你会看到
HttpBasicAuth的默认实现使用用户应用程序组件的loginByAccessToken()方法,并仅传递用户名.此实现用于验证API客户端.
loginByAccesToken将调用findIdentityByAccesToken方法您可以通过在auth属性中定义闭包来操作此行为,请参阅auth属性.
HttpBeareAuth几乎一样.它也实现了loginByAccessToken
是什么让两者彼此不同?简单的获取数据的位置.其中HttpBasicAuth期望客户端已设定的基本报头示例header('Authorization: Basic '. base64_encode("user:password"));(PHP具有建立在支持此看到:http://php.net/manual/en/features.http-auth.php)
在HttpBearerAuth该首标被定义为下面的期望header('Authorization: Bearer '. $token);
因此,您应该使用的解决方案取决于您希望用户/客户端进行身份验证的方式.你也可以使用QueryParamAuth它给用户提供在GET参数中验证自己的可能性,参见queryparamauth
如果你想使用自定义标题,我们假设X-API-Token创建自己的实现AuthMethod接口的自定义类,请参阅AuthMethod
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
7203 次 |
| 最近记录: |