我正在使用标准的 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。
所以 – 我确信这就是重定向不起作用的原因。我只是不确定为什么。
有什么想法吗?
我最近遇到了同样的问题。
就我而言,我使用
uuid
作为 id
字段,看起来 event(new Registered($user));
无法读取 id
,因此当您进行身份验证时,它会保持返回 id
为空,但在内部您的数据库,id
字段不是null
。
这是我的解决方案,在用户模型中添加此代码:
protected $keyType = 'string';
public $incrementing = false;
希望这个解决方案也能帮到你。