没有实现我自己的登录控制器,有没有办法使用 Laravel 8 和 Jetstream (Livewire)将数据传递到views/auth/login.blade.php中?
在 Laravel 7 中,LoginController 有一个 showLoginForm() 方法,你可以重写它并返回一个带有附加数据的视图。Jetstream 似乎并不那么简单。
最近对 Jetstream/Fortify 的更新已经解决了这个问题。
这就是我解决它的方法:(通过 laravel 的管道概念)
public function showLoginForm()
{
return view('admin.auth.login');
}
public function logout()
{
Session::flush();
Auth::logout();
return redirect('admin/login');
}
public function login(Request $request)
{
return $this->loginPipeline($request)->then(function ($request) {
return app(LoginResponse::class);
});
}
protected function loginPipeline($request)
{
if (Fortify::$authenticateThroughCallback) {
return (new Pipeline(app()))->send($request)->through(array_filter(
call_user_func(Fortify::$authenticateThroughCallback, $request)
));
}
if (is_array(config('fortify.pipelines.login'))) {
return (new Pipeline(app()))->send($request)->through(array_filter(
config('fortify.pipelines.login')
));
}
return (new Pipeline(app()))->send($request)->through(array_filter([
config('fortify.limiters.login') ? null : EnsureLoginIsNotThrottled::class,
RedirectIfTwoFactorAuthenticatable::class,
AttemptToAuthenticate::class,
PrepareAuthenticatedSession::class,
]));
}
如果您想做自定义字段,可以说“状态”=>“活动”。然后您需要将 RedirectIfTwoFactorAuthenticatable 复制到操作文件夹。并做这样的事情:
return tap($model::where(Fortify::username(), $request->{Fortify::username()})
->where('status', 'active')
->first(),
function ($user) use ($request) {
if (!$user || !Hash::check($request->password, $user->password)) {
$this->throwFailedAuthenticationException($request);
}
});
享受 :)