【问题标题】:Using Laravel 5.2's Authenticated() Method使用 Laravel 5.2 的 Authenticated() 方法
【发布时间】:2016-03-30 20:58:58
【问题描述】:

我正在使用 Laravel 5.2 的默认身份验证,并且在框架的 authenticated() 方法的行为上遇到了一些问题。该方法对于在成功进行身份验证后但在加载任何后续页面之前运行代码很有用。认证成功会触发AuthController中的authenticated()方法,我定义如下:

protected function authenticated() {
        session(['loggedIn' => 'show']);
        return redirect('/home');
}

正如我们所见,它可用于设置主页首次加载时所需的会话变量(但不应在每次重新加载主页时重置)。

就我而言,在用户登录或注册后,我使用loginIn 在每个会话中仅显示一次特定的欢迎 div。为此,我在主页上添加了以下 PHP:

function displayWelcome() {
    if (session('loggedIn') == 'show') {
        echo '<div class="container" name="loggedIn" id="loggedIn">';
        session(['loggedIn' => 'hide']);
    } else {
        echo '<div class="container" name="loggedIn" id="loggedIn" hidden>';
    }
}

目前,当现有用户登录时,此代码可以正常工作。

但是,它并不完全适用于用户注册。它确实成功地重定向到主页,但欢迎 div 根本没有出现。奇怪的是,当我回显 session('loggedIn') before 调用 displayWelcome() 函数时,它在注册后输出“隐藏”(并在登录后正确显示“显示”)。我看不到它是如何获取“隐藏”值的,以及为什么它没有正确打开 div。

有什么提示吗?

【问题讨论】:

    标签: laravel laravel-5 laravel-5.2


    【解决方案1】:

    您可以从此处找到的 RegistersUsers 特征覆盖 register 方法:

    \Illuminate\Foundation\Auth\RegistersUsers
    

    在您的 Auth 控制器中使用以下方法并在其中调用您的自定义代码:

    /**
         * Handle a registration request for the application.
         *
         * @param  \Illuminate\Http\Request  $request
         * @return \Illuminate\Http\Response
         */
        public function register(Request $request)
        {
            $validator = $this->validator($request->all());
    
            if ($validator->fails()) {
                $this->throwValidationException(
                    $request, $validator
                );
            }
    
            Auth::guard($this->getGuard())->login($this->create($request->all()));
    
            return redirect($this->redirectPath());
        }
    

    【讨论】:

    • 谢谢。这行得通。一个后续问题。我在 authenticated() 中有一些其他代码,它分配了一个名为 shortName 的不同会话变量: $id = \Auth::user()->inst_id; $institution = \App\Institution::find($id); session(['shortName' => $institution->shortname]);此代码无需放入注册函数即可正常工作——它允许我在注册后访问加载页面中的 shortName。你知道为什么我可以在authenticated() 中分配shortName 会话变量而不是loggedIn 会话变量进行注册吗?
    • @Atlas 如果不查看代码不确定,请尝试将 $institution = \App\Institution::find($id) 部分包装在带有 \App\Institution::findOrFail( $id) 并捕获 \Illuminate\Database\Eloquent\ModelNotFoundException
    猜你喜欢
    • 2016-09-03
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 2016-07-08
    相关资源
    最近更新 更多