【问题标题】:Laravel 3 How to use different session settings depending on URLLaravel 3 如何根据 URL 使用不同的会话设置
【发布时间】:2013-12-07 04:23:34
【问题描述】:

我使用laravel-3 开发的网站有两个不同的部分:

  • 公开。哪个网址是/
  • 管理员。哪个网址是/admin

在公共部分用户可以登录以访问他们的帐户,而在管理员中,只有具有所需权限的用户才能登录。

现在我无法区分一个部分中使用的会话与另一部分中使用的会话,因为两者都使用相同的session 配置参数,因此任何登录公共部分的人都可以进入管理区域。

我一直在考虑为admin 部分定义一个环境,并为cookiepath 定义不同的值:

$environments = array(
// Local
   'admin' => array('http://localhost*/admin'),  // To handle anything inside section "admin"
   'local' => array('http://localhost*'),        // To handle everything else
);

但是因为Request::detect_env() 只用url root 来检查这些规则,所以admin 环境永远不会出现(laravel/core.php:183)

$root = Request::foundation()->getRootUrl();
$environment = Request::detect_env($environments, $root);

【问题讨论】:

    标签: php session laravel laravel-3


    【解决方案1】:

    我建议不要使用环境来解决这个问题,而是使用带有通配符的过滤器来委托验证:

    Route::when('admin/*', 'login_admin_filter');
    

    但如果你真的想使用环境,我理解这样的文档:

    在你的开始文件中你应该使用一个闭包:

    $env = $app->detectEnvironment(function(){
        // This condition need to fail if the user isn't an administrator
        if($_SESSION['anything'] == 'admin' OR $every_thing_else){
            return 'admin';        
        } else {
            return 'production';
    });
    

    【讨论】:

    • 我猜你在login_admin_filter里面叫Auth::attempt()?使用我尝试自定义的会话参数结束。
    • 我在过滤器中验证:Auth::check()。如果失败,我会在登录表单上重定向,该表单尝试使用尝试()连接用户。困难在于区分 2 种登录(1 个管理员和 1 个普通用户),但我认为这是一个基本功能。我不是 Laravel 专家,但好像我已经了解 Auth:: 的实现
    • 哦,在过滤器中,您应该验证 Auth::check() 是否为真,并且如果他具有良好的权限(使用Auth::getUser),那么您可以根据情况切换。
    • 我实际上是在使用过滤器来做到这一点Auth::check()。问题是Auth 系统使用session 参数,我想根据用户所在的部分对它们进行个性化设置。我不想为我的publicadmin 部分使用相同的会话配置参数。
    • 如果你真的想检测一个新环境,你可以使用闭包来覆盖默认函数。在这个函数中,您可以访问所有超全局变量,包括 SESSION,然后您可以实现自己的规则。我已经在这个方向上编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2014-10-12
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多