Laravel - 身份验证::尝试不起作用,返回false
问题描述:
我想在laravel做一个登录,但我使用mssql和我的用户表命名我们。Laravel - 身份验证::尝试不起作用,返回false
在配置/ auth.php我改变了供应商更改表名称:
'providers' => [
//'users' => [
// 'driver' => 'eloquent',
// 'model' => App\User::class,
//],
'users' => [
'driver' => 'database',
'table' => 'us',
]
],
我还创建了一个名为身份验证的中间件:
public function handle($request, Closure $next)
{
if(Auth::check())
{
return $next($request);
}
else {
return redirect('/login');
}
}
现在创建帖子路线/登录现在我在没有控制器的路上做所有的事情:
Route::post('/login', function()
{
echo "login...";
$username = Input::get('username')."</br>";
$password = Input::get('password')."</br>";
$remember = Input::get('remember')."</br>";
$userdata = array(
'username' => Input::get('username'),
'codeApp' => Input::get('password')
);
$rules = array(
'username' => 'required|exists:us,username',
'codeApp' => 'required|exists:us,codeApp'
);
$validator = Validator::make($userdata, $rules);
if ($validator->passes())
{
$auth = DB::table('us')->where('username', '=', Input::get('username'))
->where('codeApp', '=', Input::get('password'))->get()->first();
// Try to log the user in.
if ($auth)
{
// Redirect to homepage
//Auth::login($auth);
dd(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember));
if(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember))
{
echo "ok";
return Redirect::to('app/groups');
}
}
}
else
{
echo "error";
return Redirect::to('login')->withErrors($validator);
}
});
当我把correc t数据以$ auth的形式获取正确的用户,但在dd(Auth::attempt(['username' => $username, 'codeApp' => $password], $remember));
返回false,我不知道为什么。
我该如何解决这个问题?
感谢
答
的问题是,在Route::post('/login', function() {}
你的变量
$username = Input::get('username')."</br>";
$password = Input::get('password')."</br>";
$remember = Input::get('remember')."</br>";
,因为你这样的结果由."</br>"
额外拼接你试图用损坏的要权威性分配错误的值证书。 要解决简单地删除该串联。
还有一件事 - 你不需要作出额外的查询到数据库,然后检查结果像你这样的:
$auth = DB::table('us')->where('username', '=', Input::get('username'))
->where('codeApp', '=', Input::get('password'))->get()->first();
// Try to log the user in.
if ($auth)
{}
仅仅是因为你已经检查了供应商的用户和appCode存在使用验证规则
$rules = array(
'username' => 'required|exists:us,username',
'codeApp' => 'required|exists:us,codeApp'
);
所以经过验证检查,只是让Auth::attempt(...)
和你做。
并使您的代码更好地用相应的变量替换您的所有Input :: get('...')调用。
还有一忠告 - 不要echo
调试应用程序流 - 使用\Log::debug('Whatever you want to debug')
写入到Laravel的日志文件,你可以用tail -f ./storage/logs/laravel.log
控制台命令跟踪