PHP Slim Framework REST API - 在每条路由之前验证访问令牌?
Posted
技术标签:
【中文标题】PHP Slim Framework REST API - 在每条路由之前验证访问令牌?【英文标题】:PHP Slim Framework REST API - Validating an access token before each route? 【发布时间】: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));
);
【问题讨论】:
【参考方案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"];以上是关于PHP Slim Framework REST API - 在每条路由之前验证访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章
学习Slim Framework for PHP v3 ( 二)
学习Slim Framework for PHP v3 --route怎么被调用的?
学习Slim Framework for PHP v3 --route怎么被匹配的?