首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel :检索用户关系

Laravel :检索用户关系
EN

Stack Overflow用户
提问于 2016-08-18 17:21:12
回答 2查看 60关注 0票数 0

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

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

代码语言:javascript
复制
protected function authenticated(Request $request, $user)
{
    $user->load('memberships');
}

有人能给我一些关于如何解决这个问题的建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-18 17:59:51

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

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

从技术上讲,说您想要将一些东西缓存到模型上,并将其存储在缓存中并不是您真正想要做的事情,因为缓存在所有用户中都是相同的,所以会话将是正确的放置位置。

票数 1
EN

Stack Overflow用户

发布于 2016-08-18 17:38:09

解决方案:在AuthenticatesUsers特性中覆盖postLogin(),以便您可以自由处理登录

App\Http\Controllers\Auth\AuthController中的

代码语言:javascript
复制
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路由

代码语言:javascript
复制
Route::auth();
Route::post('login', 'Auth\AuthController@postCustomLogin');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39024074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档