Php 如何使用Parse在REST体系结构上实现身份验证
我目前正在重做一个使用PHP Parse SDK的遗留web应用程序,我在登录验证部分。在旧的应用程序中,我们在执行Php 如何使用Parse在REST体系结构上实现身份验证,php,parse-platform,jwt,Php,Parse Platform,Jwt,我目前正在重做一个使用PHP Parse SDK的遗留web应用程序,我在登录验证部分。在旧的应用程序中,我们在执行ParseUser::signIn()和ParseUser::currentUser()时使用$\u SESSION和ParseToken来检查您是否有一个具有有效令牌的会话,但是新的应用程序是使用REST体系结构创建的,其中一个REST概念是服务器不能保持状态,即,是无状态的,在这种情况下,必须由客户端发送必要的数据 在搜索internet和论坛时,我发现开发人员通常使用JWT进
ParseUser::signIn()
和ParseUser::currentUser()
时使用$\u SESSION和ParseToken来检查您是否有一个具有有效令牌的会话,但是新的应用程序是使用REST体系结构创建的,其中一个REST概念是服务器不能保持状态,即,是无状态的,在这种情况下,必须由客户端发送必要的数据
在搜索internet和论坛时,我发现开发人员通常使用JWT进行身份验证,客户端会请求服务器的路由,服务器会返回一个令牌,并通过该令牌进行身份验证
我甚至使用Firebase/jwt-php
实现了一些东西,其中客户端[邮递员]通过body[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]);
受保护的路由有一个中间件
,该中间件检查时间是否已过期
,如果已过期,将启动401代码异常
到目前为止,身份验证是有效的,问题是我不知道这样做是否正确,因为我需要给出一个ParseUser::logIn()
,只是为了在数据库中生成一个会话,我甚至没有在这个会话中使用它来做一些身份验证,银行中的操作除外,因为从我在文档中看到的情况来看,如果数据库中没有有效的会话,应用程序将返回无效会话令牌错误
,并且在请求另一个路由时ParseUser::currentUser()
返回空值,这可能是将来的问题
有人知道我如何为用PHP制作的REST应用程序实现身份验证吗?谢谢你的帮助 我认为最简单的方法就是将默认会话存储(使用$\u session)替换为其他存储会话的存储,例如Redis。参考: 但你的做法也应该奏效。您只需确保,每次请求到来时,您都将解码JWT,从那里获取解析会话令牌,并使用
ParseUser::been
设置当前用户: