我重新安装了laravel 5.7 我已经用虚拟信息手动创建了数据库和用户表,并将数据库与应用程序连接。
任何人都可以指出为什么以下代码无法正常工作。
login.blade.php
<div class="form box">
<h1 align="center">Login - MobileInfo</h1>
<br />
@if(isset(Auth::user()->username))
<script>window.location="main/success"</script>
@endif
@if ($message = Session::get('error'))
<div class="alert alert-danger alert-block">
<button type="button" class="close" data-dismiss="alert">x</button>
<strong>{{ $message }}</strong>
</div>
@endif
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="post" action="{{ url('login/checklogin') }}">
{{ csrf_field()}}
<div class="form-group">
<label>Username</label>
<input type="text" name="username" class="form-control" />
</div>
<div class="form-group">
<label>Password</label>
<input type="password" name="password" class="form-control" />
</div>
<div class="form-group">
<input type="submit" name="login" class="btn btn-primary" value="Login" />
</div>
</form>
</div>
</div>
登录控制器
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Validator;
use Auth;
class LoginController extends Controller
{
public function index()
{
return view ('login');
}
function checklogin(Request $request)
{
$this->validate($request, [
'username' => 'required',
'password' => 'required'
]);
$user_data = array(
'username' => $request->get('username'),
'password' => $request->get('password')
);
if(Auth::attempt($user_data))
{
return redirect('login/success');
}
else
{
return back()->with('error', 'Wrong Login Details');
}
}
function success()
{
return view('dashboard');
}
function logout()
{
Auth::logout();
return redirect('login');
}
}
web.php
Route::get('/', 'LoginController@index');
Route::post('login/checklogin', 'LoginController@checklogin');
Route::get('login/success', 'LoginController@success');
Route::get('login/logout', 'LoginController@logout');
添加用户名/密码的任何正确组合后,看到的错误是Auth :: attempt($ user_data)的else块,即“错误的登录详细信息”。
答案 0 :(得分:0)
默认情况下,Laravel auth通过电子邮件提供身份验证,因此要使用其他字段登录,可以在LoginController中定义它。
public function username()
{
return 'username';
}
答案 1 :(得分:0)
Laravel使用其哈希算法存储密码,然后使用相同的哈希算法进行验证/比较。
问题是,您将文字密码存储在数据库中,这就是为什么laravel无法验证那些密码。 Laravel希望从数据库获得哈希密码。
文字密码无效。所以...
#1
最好的解决方案是,也制作一个注册表单(使用laravel Auth)并通过该注册表单插入演示数据。 Laravel将对密码进行哈希处理后存储密码,并最终成功验证这些密码。
#2
另一种(复杂/乏味的)解决方案是,使用单独的php脚本找出laravel的哈希算法和哈希密码。然后将哈希密码直接存储在数据库中。在这种情况下,您不需要注册表单,因为您是手动进行的。
更新解决方案2
使用以下代码在laravel 5.x中哈希您的文字密码。
$hashedpassword = bcrypt('plaintextpassword');