Php 如何绕过通常的Laravel身份验证过程,将用户设置为已登录
我正在构建一个新的Laravel应用程序(v5.4),它将与(安装在同一环境中)一个拥有自己的身份验证系统的现有PHP应用程序一起运行。我希望成功登录到现有系统的用户能够在Laravel应用程序中自动进行身份验证,以便他们能够在应用程序之间无缝导航 我的Laravel应用程序对现有系统的数据库具有只读访问权限(通过第二个db连接),因此它可以安全地检查PHP会话是否与数据库中记录的会话cookie匹配,我甚至可以拉出用户对象并将其交给Auth的Php 如何绕过通常的Laravel身份验证过程,将用户设置为已登录,php,session,authentication,laravel-5,Php,Session,Authentication,Laravel 5,我正在构建一个新的Laravel应用程序(v5.4),它将与(安装在同一环境中)一个拥有自己的身份验证系统的现有PHP应用程序一起运行。我希望成功登录到现有系统的用户能够在Laravel应用程序中自动进行身份验证,以便他们能够在应用程序之间无缝导航 我的Laravel应用程序对现有系统的数据库具有只读访问权限(通过第二个db连接),因此它可以安全地检查PHP会话是否与数据库中记录的会话cookie匹配,我甚至可以拉出用户对象并将其交给Auth的login()方法 我想知道将Auth置于授权状态(
login()
方法
我想知道将Auth置于授权状态(而不是来宾)的最佳方法,以及放置此类代码的最佳位置在哪里
到目前为止我一直在尝试的选项:
- 中间件:检查会话并从某个应用程序范围的中间件调用Auth上的login()方法
- 是否扩展/Auth/SessionGuard.php并重写trument()方法?如果是这样,我如何告诉其他部分使用我的扩展SessionGuard?(我怀疑这不是为了容易被推翻而设计的)
- 超级骇客讨厌的方式动态设置用户的密码为随机散列,然后调用Auth/LoginController@login()在后台使用包含该哈希作为密码字段的伪造请求。(我真的希望这不是最流行的答案)
- 其他一些选择(?)
提前感谢您对SO社区的帮助 我最后使用的解决方案是创建一个包含以下内容的中间件:
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if (isSet($_SESSION['intranet_user_id']) && $_SESSION['intranet_user_id']) {
// Log them in manually
$intranet_user_id = $_SESSION['intranet_user_id'];
if (!Auth::guest() && Auth::user()->getId() !== $intranet_user_id ) {
Auth::logout();
}
if (Auth::guest()) {
Auth::login( User::find($intranet_user_id), true);
}
} else {
Auth::logout();
}