我创建了一个名为UserLogin.blade.php的登录表单。我创建了一个名为UserLoginControl.php的控制器和名为login.php的模型。现在我想使用数据库中的用户名和密码登录我的系统。但是,在我输入用户名和密码并单击“登录”按钮后,它会显示此错误 -
(1/1)ErrorException
未定义的索引:密码
但是,我在UserLoginController.php文件中声明了用户名和密码。
我该如何解决这个问题?
这是UserLogin.blade.php(查看文件)。
<!DOCTYPE html>
<html>
<head>
</head>
<body">
<form method="post" action="{{ route('UserLogin') }}">
{{ csrf_field() }}
Username : <input type="text" name="username"> <br><br>
Password : <br><input type="password" name="password" class="text"> <br><br>
<input type="submit" name="login" value="Login"> <br>
<small><a href="{{ route('first') }}">Return Home</a></small>
</form>
</center>
</body>
</html>
这是UserLoginController.php(控制器文件)。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\login;
use Illuminate\Support\Facades\Auth;
class UserLoginController extends Controller
{
public function index()
{
return view('UserLogin');
}
public function login(Request $request)
{
$this->validate($request, [
'username' => 'required',
'password' => 'required'
]);
if (Auth::attempt(['username' => $request['username'], 'pw' => $request['password']])) {
return redirect('RegView');
}
return redirect('UserLogin');
}
}
这是login.php(模型文件)。
<?php
namespace App;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;
class login extends Model implements Authenticatable
{
use \Illuminate\Auth\Authenticatable;
}
我已经在Auth.php文件中写了这个
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
'users' => [
'driver' => 'eloquent',
'model' => App\login::class,
],
这是我创建的路线。
Route::any('/UserLogin', 'UserLoginController@index')->name('UserLogin');
Route::post('/UserLogin','UserLoginController@login');
这是我的登录表。
答案 0 :(得分:2)
首先检查您的模型login
在登录数据库架构中是否有字段password
,然后更改此字段:
if (Auth::attempt(['username' => $request->get('username'), 'pw' => $request->get('password')])) {
return redirect('RegView');
}
为:
if (Auth::attempt(['username' => $request->get('username'), 'password' => $request->get('password')])) {
return redirect('RegView');
}
也转到你的app / Http / Auth / LoginController.php并添加:
/**
* Get the login username to be used by the controller.
*
* @return string
*/
public function username()
{
return 'username';
}
最后改变了这个:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
'users' => [
'driver' => 'eloquent',
'model' => App\login::class,
],
到此:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\login::class,
],
检查页面刷新时是否有任何错误:
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
如果您真的想使用pw
代替password
,请查看以下答案:
https://stackoverflow.com/a/39382427/4369087
答案 1 :(得分:1)
您应该使用$ request上的get方法访问发布的数据,而不是使用数组语法。
if (Auth::attempt(['username' => $request->get('username'), 'pw' => $request->get('password')])) {
return redirect('RegView');
}
答案 2 :(得分:1)
根据docs,有两种方法可以做到这一点(为了清楚起见,这篇文章包含在内):
if (Auth::attempt([
'username' => $request->username,
'pw' => $request->password
])) {
return redirect('RegView');
}
或
if (Auth::attempt([
'username' => $request->input('username'),
'pw' => $request->input('password')
])) {
return redirect('RegView');
}
答案 3 :(得分:1)
在您的控制器中:
if (Auth::attempt(['username' => $request->get('username'), 'password' => $request->get('password')])) {
return redirect('RegView');
}
在你的模特中:
protected $fillable = [
'username', 'password'
];