2017-02-28 4 views
1

Dieser Fehler ist aufgetreten, wenn ich Postman mit der api.php-Datei verwende.Aufruf zu undefinierter Methode Illuminate Database Query Builder :: withAccessToken()

Verwenden Sie das Dokumentationsbeispiel von Laravel 5.4 hier ist der Code in der Datei.

Route::get('/user', function (Request $request) { 
return $request->user() ; })->middleware('auth:api'); 

Im Briefträger habe ich diese Einstellungen.

Es scheint wirklich ungewöhnlich, diese Fehler zu haben, da HasApiTokens in den relevanten Modellen sind, also was ist das Problem?

Antwort

1

Die Antwort ist eine seltsame. Ich entdeckte, indem ich die projectRoot/config/Auth.php-Datei betrachtete.

Das Modell, das ich für "Benutzer" verwendet habe, das als Standard in Laravel eingestellt ist, wurde unter dem falschen Modellordner und Modellnamen eingestellt. Siehe Bild unten.

Wie Sie in Zeile 70 sehen können, muss das Modell zum Verzeichnis- und Modellnamen Ihres Benutzers oder Hauptmodells wechseln, damit die Authentifizierung korrekt funktioniert. Dieser withAccessToken kann Sie werfen, aber es war ein Authentifizierungsproblem.

+0

Ich habe ' 'Anbieter' => [ 'Benutzer' => [ 'Treiber' => 'eloquent', 'Modell' => App \ User :: Klasse, ], // ' Benutzer '=> [ //' Treiber '=>' Datenbank ', //' Tabelle '=>' Benutzer ', //], ], 'immer noch bekomme ich den gleichen Fehler, haben Sie irgendeine Ahnung –

+0

Du hast mich gerade vor langen Kopfschmerzen gerettet. Das war definitiv das Problem für mich. –

2

Ich löste dies durch Hinzufügen von "verwenden HasApiTokens, Notificable;" in App/User.php

0

Was es für mich getan hat, war direkt in die App/User.php Benutzermodell

add "Laravel \ Passport \ HasApiTokens verwenden;"

Und direkt in de Klasse

"Verwendung HasApiTokens, authentifizierbarer, zugelassene,";

<?php 

namespace App; 

use Illuminate\Auth\Authenticatable; 
use Laravel\Lumen\Auth\Authorizable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; 
use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; 
use Laravel\Passport\HasApiTokens; 

class User extends Model implements AuthenticatableContract, AuthorizableContract 
{ 
    use HasApiTokens, Authenticatable, Authorizable; 

    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 
    ]; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 
    ]; 
} 

In meinem Fall benutze ich Lumen 5.3, aber das hat das Problem gelöst.

Verwandte Themen