当用户登录时,会话('person_id')
被设置,但是Auth::user()
返回null。
这意味着我必须在需要访问用户的属性或方法的任何地方这样做:
$person = Person::where('id', session('person_id'))->firstOrFail();
有什么更好的解决方案?我是否可以在BaseController中设置$person
,然后通过$this访问用户-
我不想为每个页面上的每个请求做数据库查询。使用Laravel 8和PHP 8。
以下是我当前的登录和注册功能:
/**
* Handles user login
*
* @param Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function login(Request $request)
{
$credentials = $request->validate([
'email' => ['required', 'email'],
'password' => ['required'],
]);
if (Auth::attempt($credentials, request('remember'))) {
$request->session()->regenerate();
return redirect()->intended('/account')->with('status', 'Logged in');
}
return back()->withErrors([
'email' => 'The provided credentials do not match our records.',
]);
}
/**
* Saves a new unverified user, sends code to their email and redirects to verify page
*
* @param Request $request
*/
public function signUp(Request $request)
{
// @todo Move to SignUpRequest file
$request->validate([
'email' => 'required|email|unique:people',
'password' => 'required',
]);
$person = new Person;
$person->email = $request->email;
$person->password = Hash::make($request->password);
if (!$person->save()) {
return back()->with('status', 'Failed to save the person to the database');
}
$request->session()->put('person_id', $person->id);
$verification = new Verification;
$verification->person_id = $person->id;
$verification->code = rand(111111, 999999);
$verification->valid_from = Carbon::now();
$verification->expires_at = Carbon::now()->addDay();
if (!$verification->save()) {
return back()->with('status', 'Failed to save the verification to the database');
}
// email stuff
return redirect('/verify')->with('status', 'Successfully created account, please verify to continue');
}
Laravel附带全局助手auth()
,您可以使用auth()访问登录用户-
你似乎在与框架默认身份验证作斗争你使用的是另一个模型,而不是用户我建议你阅读官方文档你可以看看laravel breeze,看看他们是如何实现身份验证的如果你检查laravel breeze,你会发现你错过了Auth::login($User)
public function store(Request $request)
{
$request->validate([
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'password' => ['required', 'confirmed', Rules\Password::defaults()],
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => Hash::make($request->password),
]);
event(new Registered($user));
Auth::login($user);
return redirect(RouteServiceProvider::HOME);
}
我搜索并找到了如下各种结果:auth()- 但是,我的仍然不起作用。 在控制器中工作,但在模型中不工作。它返回。 代码是: 我尝试,它也返回。 任何想法?
我正在使用laravel 5.4,Auth::login($user)显示类型错误: 传递给Illumb\Auth\SessionGuard::login()的参数1必须实现接口Illumb\Contracts\Authenticatable,给定的Illumb\Database\Eloquent\Builder实例,在第294行的/home/vendor/laravel/framework/sr
我设置了一个自定义的警卫和登录控制器 登录很好,但不知怎么的,它没有存储经过身份验证的用户 我读过这个"Auth::user()在Laravel 5.2中返回null" 并且这个"Auth::user()返回null" 但我认为我的问题与中间件无关 代码如下: 控制器: 型号: config/auth.php: 路线表: 我还尝试将此添加到控制器: 当我试图从视图访问Auth::user()时,它
我在Laravel中创建了多重身份验证。当我使用用户登录时,在post login方法中调试时,在Auth::guard('user')之后- 如何解决?我是拉威尔的初学者。 谢谢!!! /路由/auth/user。php }); /路由/网络。php }); /app/Controllers/User/Auth/LoginController-@post登录 /应用程序/控制器/用户/家庭控制器
我使用Laravel 5.2,中间件有问题。routes.php里有密码 Kernel.php: AdminPanel.php 所以,
代码$清单- 在主页上,我想查看当前登录用户的清单,而不是所有用户的清单。我似乎找不到正确的代码。 检查表 用户表 HomeController的索引操作 存储来自ChecklistController的操作 用户模型 清单模型 主视图