登录laravel后的Flash消息

时间:2017-02-08 17:19:55

标签: php laravel laravel-5

我使用Laravel 5.4和预先构建的auth库。

当用户成功登录时,我想提出一个甜蜜警报(或弹出窗口),但我无法找到重定向发生的逻辑位置。

所以:

用户成功登录

转发到家庭控制器(需要在代码中找到这个并附加一条flash消息或其他东西?)

在我的视图中,检测是否有闪存消息并在内存中发出闪存消息,以便我可以使用Javascript查询并显示警告框。

编辑:

我已经有了这套装置,没关系:

use AuthenticatesUsers;

/**
 * Where to redirect users after login.
 *
 * @var string
 */
protected $redirectTo = '/';

但我需要找到引用它的位置?并添加一条Flash消息

由于

3 个答案:

答案 0 :(得分:4)

在方法RedirectsUsers中的特征redirectPath()中引用了该属性。该特征用于AuthenticatesUsers中使用的特征LoginController

话虽如此,你需要做的很简单。在登录控制器中,我们需要覆盖特征中的方法,以便它还将消息闪烁到会话。但由于该方法具有特征,我们不想仅仅覆盖它,我们仍然希望在特征中使用该方法,因此我们首先需要将其替换为其他方法。

use AuthenticatesUsers {
    redirectPath as laravelRedirectPath;
};

现在我们可以安全地覆盖此方法以将数据刷新到会话。

/**
 * Get the post register / login redirect path.
 *
 * @return string
 */
public function redirectPath()
{
    // Do your logic to flash data to session...
    session()->flash('message', 'your message');

    // Return the results of the method we are overriding that we aliased.
    return $this->laravelRedirectPath();
}

如果您不想完成此操作,您可以做的另一件事就是收听auth.login事件,并在处理程序中闪存数据。

答案 1 :(得分:3)

  1. 编辑您的app/Http/Controllers/Auth/LoginController.php以引用HomeController路线并闪烁消息:
  2. use Session;

    protected $redirectTo = '/home'; // add your route here
    
    /**
     * The user has been authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  mixed  $user
     * @return mixed
     */
     protected function authenticated(Request $request, $user)
     {
        $request->session()->flash('flash_notification.success', 'Congratulations, you have cracked the code!');
        return redirect()->intended($this->redirectPath());
     }
    
    1. 然后,在您的视图中添加以下内容:

      @if (session()->has('flash_notification.success')) <div class="alert alert-success">{!! session('flash_notification.success') !!}</div> @endif

    2. 最后,请确保为css包含引导程序 <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

答案 2 :(得分:0)

如果您想让用户使用ajax登录并在成功登录后发送Flash消息,然后重新加载/重定向,则必须对Auth\Login Controller

进行一些更改
  1. 将这两个方法添加到Auth\Login Controller,第一个方法将在成功登录时发送响应,而第二个方法将产生错误消息。

    protected function sendLoginResponse(Request $request) {
        $request->session()->regenerate();
        $this->clearLoginAttempts($request);
        if ($request->ajax()) {
          return response()->json($this->guard()->user(), 200);
        }
        return $this->authenticated($request, $this->guard()->user())
            ?: redirect()->intended($this->redirectPath());
     }
    
    protected function sendFailedLoginResponse(Request $request)
    {
        if ($request->ajax()) {
        return response()->json([
            'error' => Lang::get('auth.failed')
        ], 401);
        }
    
        return redirect()->back()
        ->withInput($request->only($this->username(), 'remember'))
        ->withErrors([
            $this->username() => Lang::get('auth.failed'),
        ]);
    } 
    
  2. 然后使用jQuery(如果你使用它),你可以这样做

    var fdata = $("#loginForm").serialize();
    var furl = $("#loginForm").attr( "action" ); 
    $.ajax({
    url: furl, 
    type: "POST",
    data: fdata,
    success: function(data){
      console.log("Login Success");
      location.reload();
    },
    error: function(data){
      var errors = data.responseJSON;
      if(errors.error){
        console.log(errors.error);
      }
    
    }
    });
    
  3. 当然,如果您希望在服务器上设置自定义错误/ flash消息,可以将其添加到响应json。

    希望它有所帮助。