用户可以属于许多俱乐部,所以当他们登录时,我希望获得这种关系,并将其缓存在Auth::user()中,这样我就可以在整个应用程序中检查它,而不必每次访问数据库。
我一直在研究这个,但是找不到任何信息。我最接近的建议是向Http\Controllers\Auth\AuthController添加一个自定义的Http\Controllers\Auth\AuthController方法。我做了,但这没有给我任何东西。
protected function authenticated(Request $request, $user)
{
$user->load('memberships');
}有人能给我一些关于如何解决这个问题的建议吗?
发布于 2016-08-18 17:59:51
一个非常简单的方法是监听'Illuminate\Auth\Events\Login'事件,当事件发生时,检查俱乐部是否参加了会议。如果不是,则查询数据库并将它们添加到会话中,然后从会话中返回它们。
虽然它们在技术上没有附加到User模型( Auth::user()将返回),但效果是一样的,您只需通过session('clubs')从会话中获取它们。
从技术上讲,说您想要将一些东西缓存到模型上,并将其存储在缓存中并不是您真正想要做的事情,因为缓存在所有用户中都是相同的,所以会话将是正确的放置位置。
发布于 2016-08-18 17:38:09
解决方案:在AuthenticatesUsers特性中覆盖postLogin(),以便您可以自由处理登录
App\Http\Controllers\Auth\AuthController中的
public function postCustomLogin(Request $request){
$this->validateLogin($request);
$throttles = $this->isUsingThrottlesLoginsTrait();
if ($throttles && $lockedOut = $this->hasTooManyLoginAttempts($request)) {
$this->fireLockoutEvent($request);
return $this->sendLockoutResponse($request);
}
$credentials = $this->getCredentials($request);
if (Auth::guard($this->getGuard())->attempt($credentials, $request->has('remember'))) {
// DO SOME STUFF HERE. I FIRE AN event()
event(new EventUserPlaylistChange());
return $this->handleUserWasAuthenticated($request, $throttles);
}
if ($throttles && ! $lockedOut) {
$this->incrementLoginAttempts($request);
}
return $this->sendFailedLoginResponse($request);
}- In路线。覆盖postLogin路由
Route::auth();
Route::post('login', 'Auth\AuthController@postCustomLogin');https://stackoverflow.com/questions/39024074
复制相似问题