【问题标题】:How to log a NOT existing user? - Laravel如何记录不存在的用户? - 拉拉维尔
【发布时间】:2019-08-01 22:25:01
【问题描述】:

我需要登录用户而不将其创建到数据库中。我该怎么做?

我正在使用 PHP 7.3、laravel 5.8 和 Apache2。

我试过这段代码(在阅读this之后):

$user = new \App\User();
$user->password = \Hash::make("superpassword");
$user->email = "email@email.com";
$user->name = "Name";
Auth::setUser( $user );
Auth::login($user);

if (Auth::check()) {
                // the user is logged
                $request->session()->regenerate();
                $request->session()->put('key', 'value');
                $request->session()->put('userData', $user);
                $request->session()->regenerate();
                $request->session()->put('redirectTo', '/home');
                return redirect()->intended('/home');
}

在那之后,我做了一个重定向,用户似乎不再登录了。

我希望找到一种方法来记录该用户,而无需将其创建到数据库中。在默认登录页面,必须成功。

(对不起,我的英语不好,我希望我很清楚)

【问题讨论】:

  • 为什么我投了反对票?谁能解释我?谢谢大家。
  • 如果你想公开某些东西,为什么要把它放在登录后面?
  • 我不想公开。我必须对另一个项目进行 api 调用,检查该用户是否存在,然后我要登录
  • 好的,那你为什么需要这个东西来伪造登录?无论哪种方式我都不明白。也许其他人会。
  • 用户没有退出到这个 laravel 项目,所以如果该用户存在到另一个数据库中(与 laravel 项目无关),我必须找到一种方法来登录。你能建议我另一种方法吗?

标签: php laravel authentication


【解决方案1】:

一种解决方案是,创建一个在身份验证中间件之前运行的自定义 middleware,并在每个请求之前执行您的用户启动代码。或者,您可以创建一个自定义 auth guard,其中包含用于获取当前经过身份验证的用户的逻辑。

【讨论】:

    【解决方案2】:

    如您所见,Laravel 将从数据库中拉出用户,但您在数据库中没有条目,您有一个登录的 User 对象。没有id .因此,如果不改变一点基本的Auth,它将很难从一个视图转移到另一个视图。

    我遇到了类似的问题,并通过一个数据库用户解决了这个问题,该用户针对您在另一个数据库中拥有的每个用户进行了变异。根据您使用它的目的和您的安全级别,这可能会起作用 - 但如果这涉及到任何非公开的内容,我不推荐这种方法。

    基本上,在数据库中创建一个具有已知id 的用户。这是您不存在的用户。当用户从另一个数据库进来时,而不是通过假用户的日志记录,只需更改数据库中的用户名以匹配公共用户(使用已知的id)并将他作为默认登录不存在的用户。如果您遇到并发问题,请根据需要制作多个。

    此用户的权限将根据需要的公共性质设置。

    【讨论】:

    • 我不能使用同一个用户,因为我会遇到很多我无法处理的并发问题。编辑:用户必须使用需要唯一的功能,并且不同的用户可以访问不同的东西。如果我必须向所有人展示相同的东西,这可以工作。
    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    相关资源
    最近更新 更多