【问题标题】:PHP Slim Framework REST API - Validating an access token before each route?PHP Slim Framework REST API - 在每条路由之前验证访问令牌?
【发布时间】:2014-02-21 11:46:59
【问题描述】:

我已经设置了一个 RESTful API 和一个单独的客户端网站来调用它。

客户端网站使用 oAuth2 的 Resource Owner Password Credentials 授权类型从 API 获取访问令牌(来自 https://myapi.com/v1/oauth/token

对 API 的所有其他调用都必须包含访问令牌才能访问数据。

使用 Slim 框架,我如何获取访问令牌,在数据库中查询属于访问令牌的用户并使该用户模型可用于路由?

我想做这样的事情,但我不确定如何......

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));
});

【问题讨论】:

    标签: php rest access-token middleware slim


    【解决方案1】:
    $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));
    });
    

    【讨论】:

    • 真的吗?我有那么近吗?
    • 最好你使用 $app->request()->get("access_token") 而不是 $_GET["access_token"];
    猜你喜欢
    • 2022-11-02
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 1970-01-01
    • 2018-02-12
    • 1970-01-01
    • 2017-06-03
    相关资源
    最近更新 更多