首页 > 解决方案 > Laravel 身份验证不保留

问题描述

我创建了一个 API 来登录我的网络应用程序。检查参数后,使用 Auth 方法: loginUsingId() 和要登录的用户的 id。
之后我得到了正确的身份验证,实际上执行 echo Auth::user() 正确显示了用户属性。
但是,通过重定向到另一个项目页面,我不再登录门户并显示登录页面。
似乎用户的会话没有保留或根本没有创建。
我使用 Laravel 5.6。我没有路由的中间件。

标签: phplaravelapisessionlogin

解决方案


每次您的页面访问 API 时,它本质上都是在与 API 的全新实例对话。

像这样想。您的“登录”端点实际上并没有告诉 API 让某人登录。它只是告诉它只是验证调用者关于给定密码属于给定用户的声明,故事结束。如果您想从 UI 角度将该身份验证转变为实际的“登录”行为,则需要采取其他步骤。

如果 Laravel 正在为你的站点提供 Blade 文件,那就另当别论了。开箱即用,它为您生成一个 Php 会话,并将会话密钥 cookie 发送到浏览器以供后续请求使用。

与会话密钥类似,为了维护网站和单独 API 之间的会话,您需要每次后续调用都包含一个令牌。并且您需要登录端点在成功验证后提供该令牌。

护照是一种方法,但对你的情况来说可能有点矫枉过正。Passport 非常适合处理用户、客户端和授权权限。但是,如果您想要的只是身份验证,并且您不关心控制他们可以访问的内容,那么我强烈推荐Tymon JWT-Auth

Passport 和 JWT-Auth 在“授权”标头中都使用“不记名令牌”。不过还有其他种类,例如“基本令牌”。基本令牌只是用户名和密码的编码串联。 Laravel通过路由中间件支持这一点,但我仍然建议使用 JWT。

JWT 的优点之一是您实际上可以在令牌本身中包含无关数据。如果/当您需要它时,它可以让您更好地使用 Passport (OAuth2),而不需要您的客户端更改其身份验证方法。


推荐阅读