我是Laravel的新手。我试图写一个登录示例,但它显示" 302 Found"错误。
web.php(路线文件):
Route::post('login', array(
'uses' => 'UserController@doLogin'
));
Route::get('logout', array('uses' => 'UserController@doLogout'));
Route::group(['middleware' => 'AuthMiddleWare'], function () {
Route::get('/form', function () {
return view('form');
});
Route::get('/createUser', function () {
return view('users');
});
Route::get('logout', array(
'uses' => 'UserController@doLogout'
));
});
" doLogin"功能代码位于UserController中:
public function doLogin()
{
$rules = array(
'name' => 'required', // make sure the email is an actual email
'password' => 'required|alphaNum|min:3' // password can only be alphanumeric and has to be greater than 3 characters
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Redirect::to('login')
->withErrors($validator) // send back all errors to the login form
->withInput(Input::except('password')); // send back the input (not the password) so that we can repopulate the form
}
else {
// create our user data for the authentication
$userdata = array(
'name' => Input::get('name'),
'password' => Input::get('password')
);
$auth = DB::table('users')->where('name', '=', Input::get('name'))->where('password', '=', Input::get('password'))->get()->first();
// attempt to do the login
if (Auth::attempt($userdata)) {
// validation successful!
// redirect them to the secure section or whatever
// return Redirect::to('secure');
// for now we'll just echo success (even though echoing in a controller is bad)
echo 'SUCCESS!';
} else {
// validation not successful, send back to form
return Redirect::to('login');
}
}
}
登录表单
<html>
<head>
<title>LOGIN</title>
</head>
<body>
<form action="{{ route('login') }}" method="POST">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="text" name="name"><br/><br/>
<input type="text" name="surname"><br/><br/>
<input type="submit" value="LOGIN">
</form>
</body>
</html>
当我查看来自网络状态代码的登录请求时出现&#34; 302 Found&#34;。当我尝试使用 $ auth 而不是&#34; Auth :: attempt($ userdata)&#34; 仍然显示相同的错误。也许它与另一个原因有关。 我怎么能找出错误的? 提前谢谢。
答案 0 :(得分:0)
您收到此错误的原因是您正在使用route()
辅助函数,该函数按名称选择路由,并且您没有与/login
路由关联的任何名称。
您可以通过两种方式实现这一目标。
要么你必须改变
Route::post('login', array(
'as' => 'login',
'uses' => 'UserController@doLogin'
));
<强> OR 强>
action="{{ url('login') }}"
希望这有帮助
答案 1 :(得分:0)
此错误的可能原因是登录凭据未通过请求发送(使用chrome网络检查器确认已发送),或者该凭据电子邮件/密码的db表缺少字段或其他内容。在这两种情况下,Laravel都使用代码302进行重定向。
要在树枝中和并行中调试更深的@dump($ errors),请打开日志记录和监视日志。
答案 2 :(得分:0)
还要检查并确保已设置@function _construct的中间件为auth,而不是guest