【问题标题】:Laravel Authentication doesnt persist - using remote tableLaravel 身份验证不持久 - 使用远程表
【发布时间】:2018-06-06 20:22:13
【问题描述】:

这个问题已经有一段时间了。我几乎使用 Laravel 5.5 为现有数据库构建管理面板。数据库有自己的一组要管理的表和自己的用户表。该表远程托管在 RDS 实例上。

我创建了一个新的 Laravel 项目 - 我正在使用一个非常简单的身份验证脚本 - 将一个 id 和一个令牌作为参数传递给一个路由以进行登录。所以路由是这样的:

/auth/login?id=XXX&token=XXX

我的控制器方法代码只是:

$user = \App\Models\User::find($id); \Auth::loginUsingId($id);

我的配置文件引用了远程服务器上的数据库。我的用户模型是:

namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'password',
    ];

    public function __construct(){
        parent::__construct();
        $this->table = 'auth_user';
    }

    protected $hidden = [
        'password', 'remember_token',
    ];
}

\Auth::loginUsingId($id); 成功登录用户并创建了一个会话 - 但是在我刷新页面或重定向到另一个页面的那一刻 - \Auth::check() 返回false

我几乎尝试了所有方法,但会话拒绝持续 - 表具有所需的所有属性 - 我哪里出错了?

【问题讨论】:

    标签: php laravel authentication laravel-5.5


    【解决方案1】:

    由于您正在做一个远程数据库,我相信它与您的平台的 IP 不同。如果您使用的是文件会话存储,则在进行身份验证时会遇到问题。

    您可能需要考虑将会话存储到数据库服务器以解决您的问题。

    这是解决问题的最简单和最快的方法。相信我。:)

    【讨论】:

    • 不工作 - 我的意思是每次都会创建多个会话 - 但是为用户创建的会话不会持久 - Auth::loginUsingId 创建一个会话 - 但是当我重定向到另一个页面时它已经消失了:(
    • 你是否重定向到具有相同域/子域的另一个页面?如果可以,请尝试将会话表放入远程数据库,然后重试处理。
    • 在这种情况下将会话存储实现到数据库时应该不会有任何问题。几年前我遇到过你遇到的这种问题。只是分享我已经完成的解决方案,并且它从我结束到现在完全适用于所有具有外部数据库的项目。
    • 刚刚检查过 - 我将路由移动到 Web 中间件,我注意到会话不会沿着仅输出视图的闭包的路由保持。它现在可以工作了。
    【解决方案2】:

    将您的会话保存到数据库。这将为您节省一百万次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-11
      • 2014-10-03
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      相关资源
      最近更新 更多