【问题标题】:Laravel 7 manual authentication session issueLaravel 7 手动身份验证会话问题
【发布时间】:2020-09-01 17:42:49
【问题描述】:

TL;DR:在成功登录并重定向到/home后,我被Controller的中间件($this->middleware('auth');)踢回/login

我有一个php-apache docker 开发环境。最后,我能够将 Laravel 7 用于新服务,因此我设置了它,获取了框架并开始使用它。我不能使用 Laravel 的散列算法,因为我有一个自定义方法,我知道可以与 Auth::attempt() 方法一起使用 manual authentication

都设置这个点

public function login(Request $r)
{
    $data = $r->validate([
        'username' => 'required|string',
        '_pswrd'   => 'required|string',
    ]);

    $credentials = [
        'login'    => $data['username'],
        'password' => $data['_pswrd'],
        'status'   => 'A',
    ];

    try {
        if (Auth::guard()->attempt($credentials, $r->has('remember'))) {
            // Auth::user() is found and valid so redirect...
            return $r->wantsJson()
                ? new Response('', 204)
                : redirect()->intended('/');
        }

        return back()->with('errors', new MessageBag([ 'auth.failed' ]));

    } catch (Exception $e) {
        Log::warning($e);

        return back()->with('errors', new MessageBag([ 'auth.unknown' ]));
    }
}

但是,那我去home路线

class HomeController extends Controller
{
    public function __construct()
    {
        // \Illuminate\Support\Facades\Auth::user() === null
        $this->middleware('auth');
    }

    public function index()
    {
        return view('home');
    }
}
  • 为什么 HomeController 中的 Auth::user() 为空?
  • 为什么我的会话丢失了?
  • 我是否缺少 Apache 或 laravel 的 conf/ 文件夹中的某些配置?

【问题讨论】:

    标签: php laravel session-cookies laravel-7 php-7.4


    【解决方案1】:

    守卫叫什么名字?是为了web 守卫吗? 因此,尝试填写guard('web') 或直接删除它,直接Auth::attempt([])

    【讨论】:

      【解决方案2】:

      这是一种没有检查明显的问题。 Laravel 改变了(很多)用户的模型,我想稍后再看。必须修复 primary_keykeyType 属性才能使中间件正常工作。

      我会留下这个答案,因为我在这个问题上花了很多时间,总是认为它与身份验证或会话配置有关,但实际上并非如此。

      【讨论】:

        猜你喜欢
        • 2017-01-14
        • 2019-05-03
        • 2018-05-05
        • 2021-10-02
        • 2014-05-10
        • 2019-07-26
        相关资源
        最近更新 更多