2014-01-29 31 views
2

我已經設置了一個RESTful API和一個獨立的客戶端網站來調用它。PHP Slim Framework REST API - 在每個路由之前驗證訪問令牌?

客戶端網站使用的資源所有者密碼憑據授予的oauth2的類型從(從https://myapi.com/v1/oauth/token

每隔調用API的API獲得訪問令牌必須包含訪問令牌來訪問數據。

使用超薄框架,我怎麼能拿起訪問令牌,查詢屬於訪問令牌的用戶數據庫,並提供給路由用戶模式?

我想要做這樣的事,但我不完全知道如何...

function validateAccessToken() { 
    $access_token = $_GET["access_token"]; 
    $user = \models\user::where("access_token", "=", $access_token)->first(); 

    if($user === NULL) { 
     throw new exception("Invalid access token"); 
    } 

    return $user 
} 

$app->get("/v1/emails", validateAccessToken(), function() use ($app) { 
    $emails = \models\emails::where("user_id", "=", $user->id)->toArray(); 
    echo(json_encode($emails)); 
}); 

回答

5
$validateAccessToken= function($app) { 
    return function() use ($app) { 
     $access_token = $app->request()->get("access_token"); 
     $user = \models\user::where("access_token", "=", $access_token)->first(); 

     if($user === NULL) { 
      $app->redirect("/errorpage"); 
     } 


    }; 
}; 

$app->get("/v1/emails", $validateAccessToken($app), function() use ($app) { 
    // here you have to define $user once again 
    $access_token = $app->request()->get("access_token"); 
    $user = \models\user::where("access_token", "=", $access_token)->first(); 

    $emails = \models\emails::where("user_id", "=", $user->id)->toArray(); 
    echo(json_encode($emails)); 
}); 
+0

真的嗎?我那麼接近? – michael

+0

我想是這樣:d SRY,不得不再次修改它.. – JIM

+0

和更好的使用$ APP->請求() - >獲得的,而不是$ _GET( 「的access_token」) 「的access_token」]; – JIM