2015-04-17 50 views
2

我在用户模型中实现了findIdentityByAccessToken。Yii2 REST API基本身份验证(SESSION OVERRIDE)

public static function findIdentityByAccessToken($token, $type = null) 
{ 
    $apiUser = ApiAccess::find() 
     ->where(['access_token' => $token]) 
     ->one(); 
    return self::findOne(['id' => $apiUser->idUser]); 
} 

在浏览器中,如果我登录到系统,我可以打一个API获得端点,进入我的身份验证令牌,并正确进行身份验证。

但是,如果我没有登录,我会被踢回到我的登录屏幕。使用休息客户端,我返回了登录屏幕的HTML。

这表明在我眼中2件事中的1件。无论是在当前状态下,它都需要一个“登录会话”才能访问该api模块。或#2,我没有正确传递身份验证令牌。

我的请求头:

Accept: */* 
Cache-Control: no-cache 
Authentication: Basic base64('mytoken':) 

如何重写我的 “默认” 的登录行为?或正确发送身份验证令牌?

回答

0

您可以覆盖模型用户的登录方法和loginByAccessToken,以更改登录行为。请参阅:http://www.yiiframework.com/doc-2.0/yii-web-user.html

在另一方面,你可能需要(在你没有它尚未情况下)是写一个控制器和执行登录动作然后实现一个从AuthMethod扩展的类并验证方法(也许是挑战方法)。之后,您可以将该类添加为所有控制器的行为(或者更好地使所有控制器从具有该行为的一个控制器继承)。

Plase看看这个链接:http://www.yiiframework.com/doc-2.0/guide-rest-authentication.html