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