2016-04-29 61 views
1

我是新来的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', '[email protected]'); 

,这里是我的登录方法:

public function login(Request $request){ 

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

    } 

我的表是“用户”,它有'用户名'和'密码' 有什么想法如何解决这个问题? 注意:我添加了使用Auth;在我的控制器顶部

+0

您可以为您的App \ User类提供类定义吗? –

+0

<?php namespace App; 使用Illuminate \ Database \ Eloquent \ Model; 类用户扩展型号 { 公共职能的职位(){ \t回$这个 - >的hasMany( '应用程序\邮报'); } } 这就是我的应用程序\用户 –

回答

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 
{ 
    // ... 
} 
+0

伟大的工程! 但我现在有一个简单的问题,每次输入正确的用户名和密码它返回出错出错 当我输入用户的密码我试图登录与我使用bcrypt函数,我应该使用bcrybt的密码给出从形式? –

+0

默认情况下,您不必使用任何哈希函数。参见'Illuminate \ Foundation \ Auth \ AuthenticatesUsers'。这是默认的'应用程序\ Http \控制器\ Auth \ AuthController'类使用的特性 –

+0

伟大的工作,谢谢你这么多兄弟:) –