2014-02-05 33 views
1

我正在使用Restler和由Brent Shaffer編寫的OAuth2模塊。我想要做的是根據他們發送的令牌來確定用戶,而不僅僅是OAuth2Server類。Restler + OAuth2 - 正確識別用戶

有兩種方法,我可以看到這樣做。希望這解釋了我正在嘗試做的事情。

方法1:我不是特別喜歡這種方法,但它的工作原理。

POST /v1/token 

返回我的令牌,包括USER_ID,例如

{ 
    "access_token":"282090609b3407d981c2bea633a39739595ba426", 
    "expires_in":3600, 
    "token_type":"Bearer", 
    "scope":"basic", 
    "refresh_token":"b60a4e5f759168df857342380f3550bc120b6f9d", 
    "user_id": 5 
} 

既然客戶知道user_ID的,它與我的要求發送:

GET /v1/dashboard?id=5 

我__isAllowed方法需要關心檢查用戶沒有更改ID,請求不是他們的信息。

public function __isAllowed() { 
    $token = static::$server->getAccessTokenData(Request::createFromGlobals()); 

    return (($token['user_id'] > 0) && ($token['user_id'] === $_GET['id']) && ($token['group_id'] == self::$group_id)); 
} 

儀表盤類看起來是這樣的:

/* 
* @version 1 
* @access protected 
*/ 
class Dashboard { 
    /** 
    * @param int $id Customer ID {@from query} 
    * @return type 
    */ 
    public function index($id) {   
     $s = Dao\ViewCustomerDaoObject::findId($id); 

     return array_merge($s->toJSON(), $widgets); 
    } 
} 

這是我寧願被調用API:

GET /v1/dashboard 

當我要求之上,加入oauth2_token表到我的儀表板表。我認爲這可能有點破解,我不希望這會導致問題。

該信息已在OAuth2Server實例中提供,因爲OAuth2Server類確實確定是否使用了正確的標記以及它們的user_id是什麼。

有人可以請指導我在正確的方向處理這種情況,特別是與Restler?

回答

1

我其實自己想到了這一點。

在OAuth2Server - > __ isAllowed方法中,您必須將UserId設置爲靜態User類。

public function __isAllowed() { 
    $token = static::$server->getAccessTokenData(Request::createFromGlobals()); 

    // If the user_id is valid, set static user class. 
    // *** This is not production code, add more checks here if you use this! 
    if ($token['user_id'] > 0) { 
     \Luracast\Restler\User::init(); 
     \Luracast\Restler\User::setUniqueIdentifier($token['user_id']); 
     return true; 
    } 
    return false; 
} 

現在,您可以通過調用得到你們班目前已驗證的用戶:

\Luracast\Restler\User::getUniqueIdentifier(true)