Я создаю SPA, чтобы пользователь мог загрузить некоторые файлы.Внешний интерфейс написан на AngularJS, в то время как внутренний интерфейс использует API в Laravel 5.7.Аутентификация осуществляется с использованием библиотеки jwt-auth
.
До сих пор я реализовал это для зарегистрированных пользователей, где у каждого пользователя есть личный каталог на сервере, куда он / она загружает файлы.Разница между зарегистрированным и анонимным пользователями заключается в том, что через некоторое время файлы анонимного пользователя будут удалены.
Теперь я хочу сделать то же самое для анонимных / гостевых пользователей (если нажать кнопку, продолжите какГость).Итак, первое, что я попробовал в стороне authContrroller.php, - это использовать что-то вроде этого:
public function authentication(Request $rrequest) {
$credentials = $request->only('email', 'password');
// Guest authentication
if( $credentials['email'] === 'guest' && $credentials['password'] === 'guest' )
{
$payload = auth()->factory()->claims(['sub' => $this->createRandomDir()])->make();
$token = auth()->manager()->encode($payload);
// OR
$factory = JWTFactory::customClaims([
'sub' => $this->createRandomDir(),
]);
$payload = $factory->make();
$token = JWTAuth::encode($payload);
}
// Registered user authentication authentication
else
{
if (! $token = auth()->setTTL(60)->attempt($credentials))
return response()->json(['error' => 'invalid_credentials'], 400);
}
return response()->json(compact('token'));
}
Идея состояла в том, чтобы создать случайный каталог и заключить его в полезную нагрузку и использовать его при следующих запросах.
Но в случае гостя сервер возвращает в качестве токена пустой объект.Возможно, потому что в БД не было пользователя.
Другая идея, о которой я думаю, - это создать случайного пользователя (добавить его в БД) и назначить ему случайный каталог каждый раз, когда пользователю необходимо использовать приложение в качестве гостя / анонима.Единственное, чего я боюсь при таком подходе, это то, что если в гостях тысячи гостей, то в БД должны быть созданы тысячи случайных пользователей.
Так что вы думаете?Есть ли другой и более эффективный способ справиться с этим?
Любая идея приветствуется.