与PHP共享Laravel身份验证/会话

3
我正在尝试在多个简单的HTML / JavaScript应用程序中使用Laravel的身份验证功能。理想情况下,它应该是这样工作的:
1. 用户访问简单的HTML应用程序。 2. 简单的HTML应用程序包括一个PHP文件,检查用户是否经过身份验证。如果没有,则将用户发送到Laravel应用程序进行登录;如果已登录,则可以直接使用该应用程序。 3. 用户通过Laravel登录,并被重定向回HTML应用程序,此过程将重新开始。
我的问题在于检查PHP脚本中的用户是否已登录。Laravel的会话在那里不可用(通过session_start()和$_SESSION [“auth”] = true共享它只会将变量添加到Laravel版本的本机PHP会话中)。
以下是我在app/config/session.php中的设置。
return array(
    'driver' => 'native',
    'lifetime' => 120,
    'files' => storage_path().'/sessions',
    'connection' => null,
    'table' => 'sessions',
    'lottery' => array(2, 100),
    'cookie' => 'laravel_session',
    'path' => null,
    'domain' => null,

);

我将路径更改为null,因为我希望在整个域上使用会话。

我的包含的PHP脚本非常简单,如下所示:

session_start();

if($_SESSION['authenticated']){
    echo "logged_in";
} else {
    header("Location: laravel/login/url");
}

您可能会想为什么我不直接将这个应用程序包含在Laravel框架中,这是因为这个简单的HTML应用程序有大约100个不同版本分散在10个域名上,目前每个域名都有自己(非常古老和不安全的)登录脚本(每次创建新域时都会复制)。因此,我希望使用Laravel集中管理一个数据库和一个管理系统来解决这个问题。

希望这里有人知道如何修复此问题或解决它(也许我应该在我的PHP脚本中尝试使用Laravel的会话包?)。

2个回答

3
Laravel使用存储驱动程序来管理会话 - 这意味着尝试通过PHP $_SESSION变量访问其内容永远不会起作用。您的配置将默认会话驱动程序设置为“native”,这(我认为)是文件会话驱动程序,这意味着所有会话数据都存储在app / storage / sessions中(我相信它将会话数据存储在某些类似JSON的结构中)。您可以在此处阅读有关会话驱动程序的更多信息here
因此,为了回答您的问题,有几种解决方法。我可能会实现一个简单的自定义会话接口,仅检查用户是否已登录。您可以在通过laravel表单对用户进行身份验证时将用户会话设置为已登录。例如:
if (Auth::attempt(array('email' => $email, 'password' => $password))) {
    // Set your user's session to logged in here. You will have to implement some 
    // system to do so, the below code is INSECURE/NOT USEABLE
    $_SESSION['user'] = $email;
}

当用户退出登录时,您需要执行相反的操作。如上所述,仅将用户会话设置为已登录非常不安全,原因有很多,最明显的是会话劫持。 (这篇文章 是关于此主题的绝佳阅读材料) 如果您可以实现一个安全的会话管理系统(实际上,它不应该很难且轻量级),那么我认为这种策略是最好的选择。
另一种选择是尝试使用cookie作为会话驱动程序,但这样做将增加更多的复杂性和垃圾,因为您首先必须从一个cookie中获取Laravel会话ID,然后使用它来读取另一个... 这不是一个优雅的解决方案。
因此,我建议使用我谈到的第一种方法,并实现一个简单而安全的会话管理系统。希望这有所帮助!

谢谢您让这一点变得清晰明了。我想我可能会将Sentry与Laravel结合使用来实现用户管理系统,并使用相同的数据库让应用程序通过Sentry和PHP进行登录。 - Kay Lucas

2

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Ângelo Rigo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接