php – Yii2 REST简化BasicAuth
我对在Yii2中创建REST api的简单程度印象深刻.但是,我对基本身份验证有一点麻烦.我的需求是非常简单的,我想要我的解决方案. 我需要基本的令牌认证.现在我甚至没有对它进行硬编码,但是这是我迄今为止所做的. 我有数据库表来保存我的单个令牌ApiAccess(id,access_token) ApiAccess.php – 模型 – 注意:IDE在此第一行显示语法错误 class ApiAccess extends baseApiAccessBase implements IdentityInterface { public static function findIdentityByAccessToken($token,$type = null) { return static::findOne(['access_token' => $token]); } } module.php – 在init()函数中 Yii::$app->user->enableSession = false; 我做了一个ApiController,每个后续的名词扩展 ApiController.php use yiirestActiveController; use yiifiltersauthHttpBasicAuth; use appmodelsdbApiAccess; class ApiController extends ActiveController { public function behaviors() { $behaviors = parent::behaviors(); $behaviors['authenticator'] = [ 'class' => HttpBasicAuth::className(),]; return $behaviors; } } 就这样,访问浏览器中的api端点会提示输入用户名和密码.通过REST客户端请求显示访问错误. 如何正确地将HttpBasicAuth绑定到我的ApiAccess模型? 要么 如何硬编码api访问令牌? (第一选择显然是最好的) 让我们来看看,并尝试了解“yii”方式REST的基本身份验证.1.当您向REST控制器添加行为时,启用基本身份验证: $behaviors['authenticator'] = [ 'class' => HttpBasicAuth::className(),]; 和你一样这是什么意思?这意味着您的应用程序将解析您的授权头.看起来像: Authorization : Basic base64(user:password) 这是yii2的伎俩.如果你仔细看代码,你会看到yii使用user_token,所以你的标题应该是: Authorization : Basic base64(access_token:) 如果要更改此行为,您可以自己解析此标题: $behaviors['authenticator'] = [ 'class' => HttpBasicAuth::className(),'auth' => [$this,'auth'] ]; .... public function auth($username,$password) { return appmodelsUser::findOne(['login' => $username,'password' => $password]); } 第二件事要做您必须从identityInterface实现findIdentityByAccessToken()函数. class User extends ActiveRecord implements IdentityInterface 以下是您的用户类声明应该如何看待. 从您的实施和结构: public static function findIdentityByAccessToken($token,$type = null) { return static::findOne(['access_token' => $token]); } 你不返回实现标识接口的类的对象. 如何正确使用? 如果您不想向用户添加字段表 – 使用user_id,access_token字段创建新字段.那么你的实现应该是: public static function findIdentityByAccessToken($token,$type = null) { $apiUser = ApiAccess::find() ->where(['access_token' => $token]) ->one(); return static::findOne(['id' => $apiUser->user_id,'status' => self::STATUS_ACTIVE]); } 希望能覆盖你的所有问题. (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |