Laravel Custom Auth:检索用户关系

时间:2016-08-18 17:21:13

标签: laravel authentication

用户可以属于许多俱乐部,因此当他们登录时,我希望获得该关系并将其缓存在Auth::user()中,以便我可以在整个应用程序中检查它,而不必每次都访问数据库。 / p>

我一直在研究这个但却无法找到任何信息。我最接近的建议是向authenticated()添加自定义Http\Controllers\Auth\AuthController方法。我做了,但它没有给我任何东西。

protected function authenticated(Request $request, $user)
{
    $user->load('memberships');
}

有人可以就如何解决这个问题给我一些指示吗?

2 个答案:

答案 0 :(得分:1)

一个非常简单的方法是听取'Illuminate\Auth\Events\Login'事件,当它发生时,检查俱乐部是否在会话中。如果不是,请查询数据库并将其添加到会话中,然后从会话中返回。

虽然它们在技术上没有附加到由User返回的Auth::user()模型,但效果是一样的,您只需通过{{1}从会话中抓取它们}。

从技术上来说,想要将某些内容缓存到模型中并将其存储在缓存中并不是有意义的,因为缓存是相同的,但这并不是你真正想做的事情。在所有用户中,所以会话就是放置它的正确位置。

答案 1 :(得分:0)

解决方案:在验证用户特征中覆盖 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);
}

- 在路线中。覆盖postLogin路由

Route::auth();
Route::post('login', 'Auth\AuthController@postCustomLogin');