2015-04-17 48 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