Laravel 5.2:在用户登录/注销和注册后显示会话闪烁消息

Posted

技术标签:

【中文标题】Laravel 5.2:在用户登录/注销和注册后显示会话闪烁消息【英文标题】:Laravel 5.2: Display a session flash message after user login/logout and registration 【发布时间】:2016-11-26 14:41:14 【问题描述】:

使用运行php artisan make:auth 后生成的默认设置,我现在想知道如何控制我需要在用户登录时显示给用户的 Flash 消息。

到目前为止,我已经尝试将此代码添加到默认的AuthController

 public function authenticated($request, $user)
    
        flash('Welcome back ' . $user->username . ', you have been logged in');
    

但这会导致我的 Chrome 浏览器出现太多重定向错误。如何在不创建自定义 LoginController 或覆盖 AuthController 内的完整 login 方法的情况下闪烁自定义消息?

【问题讨论】:

检查/app/resources/lang/en/auth.php 文件中的一些。不确定它们是否都可以在那里定制,或者是否有些是硬编码的。 【参考方案1】:

我必须在 AuthController 中覆盖以下方法:

/**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    
        $successmessage = 'you are now successfully registered!';
        flash()->overlay('Yes', $successmessage, 'success');
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
        ]);

    

    /**
     * Log the user out of the application.
     *
     * @return \Illuminate\Http\Response
     */
    public function logout()
    
        Auth::logout();
        flash()->info('Bye', 'You have been successfully logged out!');
        return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
    

    /**
     * Function called after user logs in
     * @return \Illuminate\Http\RedirectResponse
     */
    protected function authenticated() 
        $successmessage = 'Hej '.Auth::user()->name.', you are logged in!';
        flash()->success('Hello', $successmessage);
        return redirect()->intended($this->redirectPath());
    

就是这样!请注意,我使用的是自定义闪存设置。您可以使用默认值或您自己的

【讨论】:

【参考方案2】:

Laravel 5.4

登录/注销

vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php复制authenticatedlogout方法。 粘贴到app/Http/Controllers/Auth/LoginController.php。 添加闪信。 不要忘记导入Illuminate\Http\Request

use Illuminate\Http\Request;

class LoginController extends Controller

    /**
     * The user has been authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return \Illuminate\Http\Response
     */
    protected function authenticated(Request $request, $user)
    
        return redirect('users/' . $user->id)->with('status', __('You logged in.'));
    

    /**
     * Log the user out of the application.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function logout(Request $request)
    
        $this->guard()->logout();
        $request->session()->flush();
        $request->session()->regenerate();
        return redirect('/')->with('status', __('You logged out.'));
    

注册

vendor/laravel/framework/src/Illuminate/Foundation/Auth/RegistersUsers.php复制registered方法。 粘贴到app/Http/Controllers/Auth/RegisterController.php。 添加闪信。 不要忘记导入Illuminate\Http\Request

use Illuminate\Http\Request;

class RegisterController extends Controller

    /**
     * The user has been registered.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return \Illuminate\Http\Response
     */
    protected function registered(Request $request, $user)
    
        return redirect('users/' . $user->id)->with('status', __('You were registered.'));
    

【讨论】:

以上是关于Laravel 5.2:在用户登录/注销和注册后显示会话闪烁消息的主要内容,如果未能解决你的问题,请参考以下文章

在一个用户表中使用 user_type 字段为多个用户创建 laravel 5.2 用户注册

Laravel 认证用户注销错误

用户从Laravel 5.2中的帐户删除后没有注销的原因

laravel 5.2 登录后重定向到预期的网址

php 成功登录/注销并注册Laravel 5.4后自定义重定向

laravel 5.2 身份验证 - 缺少链接