【问题标题】:Laravel Auth::guard only working for defaultLaravel Auth::guard 仅适用于默认值
【发布时间】:2019-07-05 21:01:42
【问题描述】:

我第一次在这里问任何问题,但不是最有经验的,所以请客气!

我在我的数据库中设置了两个表 - 用户和代理。

我尝试了多种登录两个用户的方法,理想情况下希望他们能够从同一个表单登录并检查两个警卫以查看凭据是否有效,但出于某种原因这样做时对警卫进行尝试,它只适用于我在我的 auth.php 文件中设置的默认值的表。

我正在尝试的守卫:

Auth::guard('web')->attempt($credentials)

Auth::guard('agent')->attempt($credentials)

如果我在 auth.php 文件中将默认保护设置为网络保护,它可以正常工作并从用户表中登录匹配的凭据,但是在尝试代理凭据时,它会显示在我的网络选项卡中:

登录 -

找到 POST 302

代理 -

找到 302

登录 -

200 确定

所以它几乎就像它承认凭据是正确的并重定向但随后不继续使用选定的守卫?

LoginController - DoLogin

Auth.php configeration

【问题讨论】:

  • 请检查是否更新
  • 你有没有看过Laravel-permission?可以帮你简化这里的逻辑组件。

标签: php laravel authentication laravel-5 guard


【解决方案1】:

在您的config/auth.php 中复制以下代码:

<?php
return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'agent' => [
            'driver' => 'session',
            'provider' => 'agents',
        ]

    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'agents' => [
            'driver' => 'eloquent',
            'model' => App\Agent::class,
        ]
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'agents' => [
            'provider' => 'agents',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],
];

在您的登录控制器中:

 public function login(Request $request)
    {
      $this->validate($request, [
        'email'   => 'required|email',
        'password' => 'required|min:6'
      ]);

      if (Auth::guard('agent')->attempt(['email' => $request->email, 'password' => $request->password])) {
        return redirect('/dashboard/agent');
      }

      if(Auth::guard('web')->attempt(['email' => $request->email, 'password' => $request->password])){
         return redirect('/dashboard/user');
      }

        return redirect()->back()->withInput($request->input());


    }

【讨论】:

  • 我遇到了同样的问题。它去 302 然后回到 200
  • 似乎使用凭据对用户进行身份验证,然后恢复为登录:/
  • 感谢您的回复,但不幸的是,尝试登录代理时仍然没有运气:(
  • 为用户和代理创建 2 个单独的登录控制器
  • 我之前有两个,然后合并为一个,但仍然有同样的问题
猜你喜欢
  • 2021-10-24
  • 2016-09-07
  • 2016-07-30
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
相关资源
最近更新 更多