如何在Laravel

时间:2017-08-08 15:22:40

标签: php mysql laravel

我创建了一个名为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');
  

这是我的登录表。

enter image description here

4 个答案:

答案 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'
];