【发布时间】:2021-02-08 04:02:14
【问题描述】:
我目前正在重做一个使用 PHP Parse SDK 的旧版 Web 应用程序,并且我处于登录身份验证部分。在旧应用程序中,我们在执行 ParseUser::signIn() 和 ParseUser::currentUser() 时使用 $ _SESSION 和 ParseToken 来检查您是否有一个带有有效令牌的会话,但是新应用程序是使用 REST 架构制作的,其中一个 REST 概念是服务器不能保持状态,即无状态,在这种情况下,客户端必须发送必要的数据。
在搜索互联网和论坛时,我看到开发人员通常使用 JWT 进行身份验证,客户端会请求服务器的路由,服务器会返回一个令牌,并通过该令牌进行身份验证.
我什至使用Firebase / jwt-php 实现了一些东西,其中客户端 [邮递员] 通过正文 [username, password] 请求路由 /login 发送,如果成功,则返回令牌用于安全路由请求。
注意:代码尽可能简单,没有验证和清理只是为了展示示例。
行动/login
$username = $request->getParsedBody()['username'];
$password = $request->getParsedBody()['password'];
$userAuthenticated = ParseUser::logIn($username, $password);
$payload = [
'data' => $userAuthenticated,
'exp' => time() + 3600
];
$token = JWT::encode($payload, $_ENV['JWT_SECRET_KEY']);
echo json_encode(['token' => $token]);
并且受保护的路由有一个middleware,它会检查 time has expired,如果发生这种情况,就会启动一个带有401代码的异常。
到目前为止一切顺利,身份验证工作,问题我不知道这样做是否正确,因为我需要给一个ParseUser::logIn(),只是为了在数据库中生成一个会话而我没有甚至在这个会话中使用它来做一些身份验证,除了银行中的操作,因为从我在文档中看到的,如果数据库中没有有效的会话,应用程序将返回invalid session token error,并且在进行请求另一条路由ParseUser::currentUser()返回null,这可能是未来的问题。
有谁知道如何为 PHP 制作的 REST 应用程序实现身份验证?感谢您的帮助!
【问题讨论】:
标签: php parse-platform jwt