Laravel auth不显示会话消息

时间:2017-10-13 04:15:21

标签: php laravel session authentication laravel-5.2

我正在尝试在laravel 5.2中验证用户类型。路线如下:

Route::group(['middleware' => ['web']], function(){
    Route::auth();
    Route::get('/user/department/login', ['as' => 'department_login', 'uses' => 'DepartmentUserAuth\AuthController@showLoginForm']);
    Route::post('/user/department/login','DepartmentUserAuth\AuthController@deptLoginPost');

}); 

AuthController.php

public function deptLoginPost(Request $request)
{

    $this->validate($request, [
        'username'      => 'required',
        'password'      => 'required',
    ]);
    if (auth()->guard('department_user')->attempt(['username' => $request->input('username'), 'password' => $request->input('password')]))
    {
        $user = auth()->guard('department_user')->user();
        dd($user);
    }else{
       return redirect('/user/department/login')->with('message', 'Invalid credentials');
    }
}

login.blade.php是:

@if(Session::has('message'))
<div class="row">
   <div class="col-lg-12">
         <div class="alert {{ Session::get('alert-class', 'alert-info') }}">
               <button type="button" class="close" data-dismiss="alert">×</button>
               {!! Session::get('message') !!}
         </div>
      </div>
</div>
@endif

{{ dump(session()->all()) }}

Session::has('message')为空,dump显示如下:

array:3 [▼
  "_token" => "BvQ630KrUl78Ngb8d3cst6pAIqenra3ohbYbLzAP"
  "_previous" => array:1 [▼
    "url" => "http://localhost:8080/material/public/user/department/login"
  ]
  "flash" => array:2 [▼
    "old" => []
    "new" => []
  ]
]

如何在login.blade.php中显示所有错误消息(如在默认身份验证控制器中)?

4 个答案:

答案 0 :(得分:3)

尝试直接在请求的消息上设置消息:

$request->session()->flash('message', 'Invalid credentials');

示例:

if (auth()->guard('department_user')->attempt(['username' => $request->input('username'), 'password' => $request->input('password')]))
{
    $user = auth()->guard('department_user')->user();
    dd($user);
}else{
    $request->session()->flash('message', 'Invalid credentials');
    return redirect()->back();
}

如果仍然没有帮助,请查看您的路线,看看您的中间件是否已正确分配。

// either as a string
Route::group(['middleware' => 'web']...
// or as a array element
Route::group(['middlewareGroups' => ['web']]...

答案 1 :(得分:2)

据我所知,这应该是可行的(实际上,我刚刚在一个新的Laravel 5.2安装中尝试了这个并且它按预期工作)。我唯一的猜测是,with方法不会在会话中“永久”写入消息,而是在闪存数据中写入消息(仅适用于下一个请求周期)。如果由于某种原因,您收到重定向响应,则该响应将使用闪存数据,并且当您再次到达登录表单时,该消息将不再出现在会话中。

那么,除了AuthController中的重定向之外,你还在进行任何重定向吗?也许在中间件?

你可以尝试一些事情:

  • 添加一些记录每个请求的中间件(see, how to log every response in Laravel 5.2 framework),以便跟踪是否有其他重定向。

  • session()->reflash();添加到与每个请求一起运行的中间件。 (如果这项工作,这应该证明我的观点是在中间请求中消耗了闪存数据。)

  • 替换

    return redirect('/user/department/login')
        ->with('message', 'Invalid credentials');
    

    return redirect()
        ->back()->with('message', 'Invalid credentials');
    
  • 替换(仅暂时,以测试您可以从会话存储中写入和读取)

    return redirect('/user/department/login')
        ->with('message', 'Invalid credentials');
    

     session(['message' => 'Invalid credentials']);
     return redirect('/user/department/login');
    

答案 2 :(得分:1)

据我所知,routes.php文件中的路由默认已使用web中间件,因此无需再次包装。

Route::auth()正在使用默认的Laravel身份验证路由,可能与他们和部门登录的路由冲突,所以请尝试删除该行。

最后,我建议使用session()->flash('message', 'Invalid credentials');代替->with()

答案 3 :(得分:1)

另外,使用Session外观:

//display error message
Session::flash('message', 'Invalid credentials')

//color the output
Session::flash('alert-class', 'alert-danger')

或者,使用laracasts/flash,您可以:

//AuthController
flash('Invalid credentials')->error();

//login.blade.php
@include('flash::message')