2016-04-29 18 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 名前空間App。 Illuminate \ Database \ Eloquent \ Modelを使用します。 クラスのユーザーは、モデル { パブリック関数のポスト(){ \tリターンます$ this-> hasManyの( 'アプリケーション\ポスト')を拡張します。 } } これは私のApp \ Userにあります。 –

答えて

0

App\Userクラスは、Illuminate\Contracts\Auth\Authenticable契約を実装する必要があります。これは、リポジトリメソッドがタイプヒントされているためです。既定のユーザー実装(少なくとも現在は5.2)では、間接的にIlluminate\Foundation\Auth\Userを拡張しています。

Authenticable契約の情報は、認証時にdocumentationのエントリにあります。そのリンクから、契約は次のようになります。幸いなこと

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'を参照してください。これは、デフォルトの 'App \ Http \ Controllers \ Auth \ AuthController'クラスで使用されている特性です –

+0

素晴らしいです、ありがとうございます。 –