我正在尝试在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
中显示所有错误消息(如在默认身份验证控制器中)?
答案 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')