NoActiveAccessToken 即使令牌存在 - OAuth2 + Laravel + Swift 的 Lumen
NoActiveAccessToken even though Token Exists - OAuth2 + Lumen of Laravel + Swift
我成功访问了 access_token,但是我在获取 user_id 时遇到了问题。我收到错误:
NoActiveAccessTokenException Authorizer.php line 104 Tried to access session data without an active access token
我做错了什么?
$app->get('/me', function () {
$id = Authorizer::getResourceOwnerId();
return response()->json(['id' => $id]);
});
在Swift(注意token
有效):
func me(handler: (data: NSDictionary?, error: String?) -> Void)
{
let url = NSURL(string: "/me", relativeToURL: self.baseUrl)
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "GET"
if let t = self.getAccessToken()
{
request.setValue("Bearer \(t)", forHTTPHeaderField: "Authorization")
print(t) // Token is valid "y7bPb1NgUBxmHSIbwsgBgPxJcM0ywnithG5PvEEv"
let taskInstance = DataTaskHandler()
taskInstance.make(request, handler: { (result, error) -> Void in
if let res = result
{
if let jsonDictionary = JSONParser(data: res).dictionary()
{
print(jsonDictionary)
handler(data: jsonDictionary, error: nil)
}
}
})
}
else
{
handler(data:nil, error: "The access token is not available")
}
}
请注意,您 access_token 仅在短时间内有效。因此,在那之后,必须使用 refresh_toke、grant_type 刷新访问令牌。在这里查看详细信息:https://github.com/lucadegasperi/oauth2-server-laravel/wiki/Implementing-an-Authorization-Server-with-the-Refresh-Token-Grant
或者您可以增加 access_token 的时间。只需转到 config/oauth.php 并更改 ttl 索引(通常是 3600 -> 1 小时),请考虑到 access_token 出于安全原因必须有较短的时间,所以点ttl 增加太多。
编辑:
重要的是要检查您是否在控制器方法中或在请求期间使用了 oauth 中间件,因为此中间件在整个请求期间稳定了 access_token 值。
只需将其添加到控制器的构造函数中即可。
public function __construct()
{
$this->middleware('oauth');
}
希望对您有所帮助。
投注愿望。
PS(给其他读者):这个问题与Lumen课程有关here
我成功访问了 access_token,但是我在获取 user_id 时遇到了问题。我收到错误:
NoActiveAccessTokenException Authorizer.php line 104 Tried to access session data without an active access token
我做错了什么?
$app->get('/me', function () {
$id = Authorizer::getResourceOwnerId();
return response()->json(['id' => $id]);
});
在Swift(注意token
有效):
func me(handler: (data: NSDictionary?, error: String?) -> Void)
{
let url = NSURL(string: "/me", relativeToURL: self.baseUrl)
let request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "GET"
if let t = self.getAccessToken()
{
request.setValue("Bearer \(t)", forHTTPHeaderField: "Authorization")
print(t) // Token is valid "y7bPb1NgUBxmHSIbwsgBgPxJcM0ywnithG5PvEEv"
let taskInstance = DataTaskHandler()
taskInstance.make(request, handler: { (result, error) -> Void in
if let res = result
{
if let jsonDictionary = JSONParser(data: res).dictionary()
{
print(jsonDictionary)
handler(data: jsonDictionary, error: nil)
}
}
})
}
else
{
handler(data:nil, error: "The access token is not available")
}
}
请注意,您 access_token 仅在短时间内有效。因此,在那之后,必须使用 refresh_toke、grant_type 刷新访问令牌。在这里查看详细信息:https://github.com/lucadegasperi/oauth2-server-laravel/wiki/Implementing-an-Authorization-Server-with-the-Refresh-Token-Grant
或者您可以增加 access_token 的时间。只需转到 config/oauth.php 并更改 ttl 索引(通常是 3600 -> 1 小时),请考虑到 access_token 出于安全原因必须有较短的时间,所以点ttl 增加太多。
编辑:
重要的是要检查您是否在控制器方法中或在请求期间使用了 oauth 中间件,因为此中间件在整个请求期间稳定了 access_token 值。 只需将其添加到控制器的构造函数中即可。
public function __construct()
{
$this->middleware('oauth');
}
希望对您有所帮助。
投注愿望。
PS(给其他读者):这个问题与Lumen课程有关here