我试图找到方法$user->createToken('MyApp')->accessToken;
返回的令牌存储在数据库中的位置,但我似乎无法找到它。它首先存储在服务器中吗?如果是这样,在哪里?
如果它没有存储在服务器上,因为它是自包含的,为什么Laravel的开发人员将$table->rememberToken();
置于默认的create_users_table.php
迁移中?专栏remember_token
的目的是什么?
感谢您的帮助。
答案 0 :(得分:5)
我猜您可以说令牌的 some 部分存储在数据库中。
返回的令牌为JWT(JSON Web令牌)。在其中编码的是有关令牌的信息,例如令牌的到期时间,用于对其进行哈希处理的算法,令牌作用域及其ID(在有效载荷中,其名称为jti
)。该ID是oauth_access_tokens
表中存储的ID。
在\Laravel\Passport\PersonalAccessTokenFactory::findAccessToken
类中的此方法中,您可以看到Laravel如何检查令牌是否在数据库中:
/**
* Get the access token instance for the parsed response.
*
* @param array $response
* @return Token
*/
protected function findAccessToken(array $response)
{
return $this->tokens->find(
$this->jwt->parse($response['access_token'])->getClaim('jti')
);
}
如果获得有效的令牌并将其粘贴到this online tool中,您将看到它的结构。外观如下:
现在,知道有效载荷的预期格式了,如果您稍微了解一下此信息和oauth_access_tokens
中的数据(id,作用域,创建和到期日期),就应该能够创建有效的令牌。
答案 1 :(得分:1)
当您登录网络时,记住用户表中的令牌是“记住我”。 how to show Back/Forward buttons in Android Studio 3.0.1 IDE
如果您使用护照并创建API,您可以在数据库的oauth_access_tokens中找到令牌ID。
答案 2 :(得分:0)
不,访问令牌值不会存储在任何地方。如果你失去它,它就消失了。您需要重新生成新令牌。
rememeber_token
字段用于"记住我"正常Web身份验证的功能。它完全与Passport API身份验证无关。