2016-06-30 3 views
0

Wir arbeiten an zwei Laravel-Projekten, einem für Front-End-Laravel und für Backend-API. Ich habe Tutorials über die Verbindung dieser beiden Projekte gemacht, aber nutze die Anleitung. Allerdings bekomme ich ein undefiniertes Index-Passwort. Ich habe bereits den Benutzer ['data'] in getUsers-Methode getdign und das richtige Passwort bekommen. Kann mir jemand dabei helfen?Anmeldung mit benutzerdefinierter Authentifizierung nicht möglich. Verbindung mit einer anderen API

ApiUserProvider 

<?php 

namespace App\Auth; 

use Illuminate\Contracts\Auth\UserProvider; 
use Illuminate\Contracts\Auth\Authenticatable as UserContract; 
use Illuminate\Http\Request; 

use GuzzleHttp\Client; 

class ApiUserProvider implements UserProvider 
{ 

    public function retrieveByCredentials(array $credentials) 
    { 
     $user = $this->getUserByUsername($credentials['username']); 

     return $this->getApiUser($user); 
    } 

    public function retrieveById($identifier) 
    { 
     $user = $this->getUserById($identifier); 

     return $this->getApiUser($user); 
    } 

    public function validateCredentials(UserContract $user, array $credentials) 
    { 
     return $user->getAuthPassword() == bcrypt($credentials['password']); 
    } 

    protected function getApiUser($user) 
    { 
     if ($user !== null) { 
      return new ApiUser($user); 
     } 
    } 

    protected function getUsers() 
    { 
     $client = new Client(['base_uri' => 'http://127.0.0.1:80/api.kourse/public/api/v1/']); 

     $response1 = $client->request('POST', 'oauth/access_token', [ 
      'form_params' => [ 
       'client_id' => 'id1', 
       'client_secret' => 'secret1', 
       'grant_type' => 'password', 
       'username' => '[email protected]', 
       'password' => 'password' 
      ] 
     ]); 


     $location = json_decode($response1->getBody(), true); 

     $token = $location['access_token']; 

     // Send a request to https://foo.com/api/test 
     $response2 = $client->request('GET', 'users/self', [ 
      'headers' => [ 
       'Authorization' => 'Bearer '. $token 
      ] 
     ]); 

     $user = json_decode($response2->getBody(), true); 
     return $user['data']; 
    } 

    protected function getUserById($id) 
    { 
     $user = []; 

     if($this->getUsers()['email'] == $id){ 
      $user['id'] = $id; 
     } 

     dd($user); 
     return $user ?: null; 
    } 

    protected function getUserByUsername($username) 
    { 
     $user = []; 


     if($this->getUsers()['email'] == $username){ 
      $user['email'] = $username; 
     } 

     return $user ?: null; 
    } 

    // The methods below need to be defined because of the Authenticatable contract 
    // but need no implementation for 'Auth::attempt' to work and can be implemented 
    // if you need their functionality 
    public function retrieveByToken($identifier, $token) { } 
    public function updateRememberToken(UserContract $user, $token) { } 

} 

ApiUser

namespace App\Auth; 

use Illuminate\Auth\GenericUser; 
use Illuminate\Contracts\Auth\Authenticatable as UserContract; 

class ApiUser extends GenericUser implements UserContract 
{ 


    public function getAuthIdentifier() 
    { 
     return $this->attributes['id']; 
    } 
} 

Usercontroller

public function login(Request $request) 
{ 
    $email = $request->email; 
    $password = bcrypt($request->password); 

    if (Auth::attempt(['username' => $email, 'password' => $password])) { 
     return "hello"; 
    } 
} 

Fehler enter image description here

AuthServiceProvider

class AuthServiceProvider extends ServiceProvider 
{ 
    /** 
    * The policy mappings for the application. 
    * 
    * @var array 
    */ 
    protected $policies = [ 
     'App\Model' => 'App\Policies\ModelPolicy', 
    ]; 

    /** 
    * Register any application authentication/authorization services. 
    * 
    * @param \Illuminate\Contracts\Auth\Access\Gate $gate 
    * @return void 
    */ 
    public function boot(GateContract $gate) 
    { 
     $this->registerPolicies($gate); 

     Auth::provider('api', function($app, array $config) { 
      return new ApiUserProvider($config['model']); 
     }); 
    } 
} 
+0

Können Sie den vollständigen Fehler aus dem Protokoll einfügen und erklären, wann Sie es erhalten. – TheFallen

+0

ErrorException in GenericUser.php Zeile 56: Undefinierter Index: Kennwort. Ich erhalte einen Fehler beim Einloggen. Im ApiUserProvider validateCredentials bekomme ich Fehler – Jearson

+0

@TheFallen Können Sie mir bitte dabei helfen – Jearson

Antwort

0

Meine beste Vermutung wäre, dann User-Modell zu öffnen, und wenn Sie:

protected $hidden = [ 
    'password', 
    'remember_token', 
]; 

es ein leeres Array zu machen, wie diese protected $hidden = [];. Ich denke, das könnte funktionieren, denn wenn Sie ApiUser return new ApiUser($user); neu erstellen, wird das User-Objekt in Array konvertiert und das Passwort-Attribut wegen der $ hidden-Eigenschaft entfernt.

+0

Okay, danke, dass ich schon das getan habe. für den Moment habe ich die Validierungsdaten geändert in - true zurück. Jetzt bekomme ich diese ErrorException in ApiUser.php Zeile 15: Undefinierter Index: ID. Können Sie überprüfen, ob ich den ApiUserProvider korrekt registriert habe? Bitte sehen Sie sich die aktualisierte Frage an – Jearson

Verwandte Themen