Auth::login 在 Laravel 9 中不起作用。注册后将用户重定向回 /login

问题描述 投票:0回答:1

我正在使用标准的 Laravel 身份验证。

这是我的 RegisteredUserController.php 文件:

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Providers\RouteServiceProvider;
use Illuminate\Auth\Events\Registered;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Hash;
use Illuminate\Validation\Rules;
use Laravel\Cashier\Exceptions\IncompletePayment;

class RegisteredUserController extends Controller
{
    /**
     * Display the registration view.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('auth.register');
    }

    /**
     * Handle an incoming registration request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     *
     * @throws \Illuminate\Validation\ValidationException
     */
    public function store(Request $request)
    {
        $userID = uniqid('u-');

        $request->validate([
            'first_name' => 'required|string|max:255',
            'last_name' => 'required|string|max:255',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => ['required', 'confirmed', Rules\Password::defaults()],
        ]);
        
        $user = User::create([
            'unique_id' => $userID,
            'first_name' => $request->first_name,
            'last_name' => $request->last_name,
            'name' => $request->first_name." ".$request->last_name,
            'email' => $request->email,
            'password' => Hash::make($request->password),
            'user_role' => 'approval_pending',
            'show_in_directory' => 'on',
        ]);

        event(new Registered($user));

        Auth::login($user);

        return redirect(RouteServiceProvider::HOME);
    }
}

每当新用户注册时,我都可以看到它会在数据库中创建一个条目,其中包含他们输入的所有信息。所以,我知道 event(new Registered($user));正在工作。

但是,之后的行:Auth::login($user);似乎不起作用,因为当它重定向时,仪表板(默认情况下重定向到的位置)会发现他们尚未登录,并将他们踢回到登录屏幕。

但是...如果我在那之后尝试登录,它会很好地记录它们。

我最初认为这可能是重定向上的 RouteServiceProvider::HOME 规范的问题。我尝试将其更改为其他一些路由 - 我可以在我的控制台中看到它确实将它们发送到页面 - 但是,因为他们没有登录,所以它立即将他们踢回到登录屏幕。

所以 – 我知道重定向正在正常工作。问题确实是 – 为什么 Auth::login($user) 不起作用?

我尝试将该函数的内容设置为变量:

$auth = Auth::login($user);

然后运行:

dd($user)
首先确保 $user 对象不为空(它不是)。

然后我跑了:

dd($auth);

返回 null。

所以 – 我确信这就是重定向不起作用的原因。我只是不确定为什么。

有什么想法吗?

laravel authentication breeze
1个回答
0
投票

我最近遇到了同样的问题。

就我而言,我使用

uuid
作为
id
字段,看起来
event(new Registered($user));
无法读取
id
,因此当您进行身份验证时,它会保持返回
id
为空,但在内部您的数据库,
id
字段不是
null

这是我的解决方案,在用户模型中添加此代码:

protected $keyType = 'string';

public $incrementing = false;

希望这个解决方案也能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.