Laravel:从一个子域登录到另一个子域:会话问题

时间:2017-03-11 15:10:45

标签: laravel laravel-5 laravel-4

我在laravel 4.2上使用Sentry在一个应用程序中使用muti-subdomain(每个域都有不同的用户):我想从一个子域(domain-a.maindomain.com)登录到另一个子域(domain-b.maindomain) .com)没有跨子域持久化会话。

任何人都知道如何用laravel实现这个目标

3 个答案:

答案 0 :(得分:0)

我在5.1版之前不熟悉Laravel,但有部分文档与身份验证有关:

https://laravel.com/docs/4.2/security

$user = User::find(1);

Auth::login($user);

通过此功能,您可以对从一个域到另一个域的用户进行身份验证。您需要将第一个域中的内容传递给第二个域,这是两个用户模型之间的唯一公共属性,然后对匹配的用户进行身份验证。

答案 1 :(得分:0)

在(php / mysql)中,我们可以在所有数据库中创建一个名为IslogedIn的行(或者您喜欢的其他内容),以便它们看起来像:

     //---------------------------------------------
     //  (main database)    --> site1.com
     //   ------------------------------------------
     //  | id  | username  | password |  IslogedIn  |
     //  |-----|-----------|----------|-------------|
     //  |  1  |  jhony    |   pass   |      0      |
     //  |-----|-----------|----------|-------------|


     //---------------------------------------------
     //  (2nd database)    --> site2.com
     //   ------------------------------------------
     //  | id  | username  | password |  IslogedIn  |
     //  |-----|-----------|----------|-------------|
     //  |  1  |  jhony    |   pass   |      1      |
     //  |-----|-----------|----------|-------------|

这里我们看到用户已登录2nd database  
所以价值将是:IslogedIn = 1   
我们将在我们所有的域中使用它和来自“login.php”(在Laravel中它可以是其他的东西),从“login.php”我们标记IslogedIn = 1如果用户使用一些mysql命令登录。

之后我们使用脚本页面连接所有数据库,并在两个域文件夹中将其命名为:'checkout.php'并写入其中:

    旧的php版本
  • 1 -

    $Db_Main_con = mysql_connect($hostname, $username, $password ); 
    $Db_2nd_con  = mysql_connect($hostname, $username, $password , true);  
    //-------------------------------------------------------------
    $Db_Main_Select = mysql_select_db("Database_name1", $Db_Main_con);
    $Db_2nd_Select  = mysql_select_db("Database_name2", $Db_2nd_con );
    //-------------------------------------------------------------
    $Db_main = mysql_query("select * from users where id = :id", $Db_Main_Select);
    $Db_2nd  = mysql_query("select * from users where id = :id", $Db_2nd_Select);
    
  • 新版本的
  • 2 - 通常类似于过去代码中的一些更改,例如mysqlmysqli。阅读这篇文章:mysqli_connect

  

我不熟悉Laravel所以你更改了“$ host_main_name”和“$ username”和(表名).....等脚本你的脚本

并从每个db调用$string中的行:(IslogedIn)。

然后我们去检查用户是否在我们拥有的所有Db中都是Logedin:

    if ( $Db_Main->IslogedIn  || $Db_2nd->IslogedIn  )
     {
      // ----->> your login code or relogin code here
      //         + sessions and cookies and reloud link and all other stuff 

     }

然后我们会在结帐时用$Db_Main->close(); $Db_2nd->close(); .... etc关闭脚本。

答案 2 :(得分:0)

我认为由于Laravel身份验证系统使用cookie来管理会话,因此您实际上需要在您将要使用的每个子域上登录用户。为避免这种情况,您可以使用其他会话驱动程序,如数据库@SUB-HDR在评论中给你的是一个好方法。