在Laravel 5.2中尝试手动验证时出现奇怪的错误

时间:2016-04-29 18:19:11

标签: php laravel-5.2

我是Laravel 5.2的新手,所以现在我尝试手动验证,但是我收到了这个错误:

1/1
ErrorException in EloquentUserProvider.php line 114:
Argument 1 passed to Illuminate\Auth\EloquentUserProvider::validateCredentials() must be an instance of Illuminate\Contracts\Auth\Authenticatable, instance of App\User given, called in C:\xampp\htdocs\myblog\vendor\laravel\framework\src\Illuminate\Auth\SessionGuard.php on line 378 and defined

这是我的表格:

<form method="post" action='login'>
                {!! csrf_field() !!}
                    <div class="form-group">
                    <label for="username">Username</label>
                    <input name="username" placeholder="Your name" class="form-control">
                    </div>

                    <div class="form-group">
                    <label for="password">Password</label>
                    <input name="password" class="form-control">
                    </div>

                    <div class="form-group">
                    <button class="btn btn-primary" type="submit">Login</button>
                    </div>

                </form>

以及我的路线:

Route::post('login', 'ProfilesController@login');

这是我的登录方式:

public function login(Request $request){

        if (Auth::attempt(['username' => $request->username, 'password' => $request->password])) {
            // Authentication passed...
            return redirect()->intended();
        }else{
            return "Something went wrong";
        }

    }

我的桌子是&#39;用户&#39;它有&#39;用户名&#39;和密码&#39; 知道如何解决这个问题吗? 注意:我添加了使用Auth;在我的控制器顶部

1 个答案:

答案 0 :(得分:0)

您的App\User课程必须实施Illuminate\Contracts\Auth\Authenticable合同。这是因为存储库方法将其类型化。默认用户实现(至少现在为5.2)通过扩展Illuminate\Foundation\Auth\User间接实现。

您可以在documentation身份验证条目中找到有关Authenticable合同的信息。从该链接看,合同如下:

namespace Illuminate\Contracts\Auth;

interface Authenticatable {

    public function getAuthIdentifierName();
    public function getAuthIdentifier();
    public function getAuthPassword();
    public function getRememberToken();
    public function setRememberToken($value);
    public function getRememberTokenName();

}

幸运的是,Laravel在Illuminate\Auth\Authenticable中提供了一个特性,为您提供了很多这样的功能,所以您需要做的就是use这个特性,你可以做到这一点与默认的Laravel 5.2相同(通过继承自同一个类):

<?php namespace App;

use Illuminate\Foundation\Auth\User as Authenticable;

class User extends Authenticable
{
    // ...
}