Я успешно вошел в систему через приложение laravel, используя пользовательскую модель и поля.
Но проблема в том, как выполнить выход из системы и выполнить другие операции. Вот список маршрутов
+--------+----------+--------------+------+----------------------------------------------+-----------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+--------------+------+----------------------------------------------+-----------------+
| | GET|HEAD | / | | Closure | web |
| | POST | api/login | | App\Http\Controllers\AuthController@login | api |
| | GET|HEAD | api/logout | | App\Http\Controllers\AuthController@logout | api,jwt.auth |
| | POST | api/me | | App\Http\Controllers\AuthController@me | api,jwt.auth |
| | POST | api/refresh | | App\Http\Controllers\AuthController@refresh | api,jwt.refresh |
| | POST | api/register | | App\Http\Controllers\AuthController@register | api |
| | GET|HEAD | login | | Closure | web |
+--------+----------+--------------+------+----------------------------------------------+-----------------+
а вот как все организовать маршрут
Route::post('register', 'AuthController@register');
Route::post('login', 'AuthController@login');
Route::middleware('jwt.auth')->group(function () {
Route::get('logout', 'AuthController@logout');
Route::post('me', 'AuthController@me');
});
Route::middleware('jwt.refresh')->group(function () {
Route::post('refresh', 'AuthController@refresh');
});
проблема с jwt.auth
а также jwt.refresh
, Оба вернут типичный 401. Я имею в виду ответ 401 laravel.
К вашему сведению, я не использую обычную электронную почту и пароль для аутентификации пользователя, но я использую другое имя для проверки учетных данных. Поэтому я должен создать другого поставщика услуг и переписать validateCredential, как показано ниже
/**
* Validate a user against the given credentials.
*
* @param \Illuminate\Contracts\Auth\Authenticatable $user
* @param array $credentials
*
* @return bool
*/
public function validateCredentials(UserContract $user, array $credentials)
{
$plain = $credentials['password']; // will depend on the name of the input on the login form
$hashedValue = $user->getAuthPassword();
if ($this->hasher->needsRehash($hashedValue) && $hashedValue === md5($plain)) {
$user->us_password = bcrypt($plain);
$user->save();
}
return $this->hasher->check($plain, $user->getAuthPassword());
}
и сделать некоторые изменения на AuthServiceProvider
class AuthServiceProvider extends ServiceProvider
{
...
/**
* Register any authentication / authorization services.
*/
public function boot()
{
$this->registerPolicies();
$this->app['auth']->provider('custom', function ($app, array $config) {
$model = $app['config']['auth.providers.users.model'];
return new CustomUserProvider($app['hash'], $model);
});
}
}
Я начинаю подозревать, что этот пакет не совместим с Laravel 5.7. Потому что я использую самую предложенную версию ("tymon/jwt-auth": "dev-develop"
)
Задача ещё не решена.
Других решений пока нет …