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";
}
}
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']);
});
}
}
Können Sie den vollständigen Fehler aus dem Protokoll einfügen und erklären, wann Sie es erhalten. – TheFallen
ErrorException in GenericUser.php Zeile 56: Undefinierter Index: Kennwort. Ich erhalte einen Fehler beim Einloggen. Im ApiUserProvider validateCredentials bekomme ich Fehler – Jearson
@TheFallen Können Sie mir bitte dabei helfen – Jearson