Аутентификация гостевых / анонимных пользователей с использованием JWT - PullRequest
0 голосов
/ 05 октября 2018

Я создаю 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'));
}

Идея состояла в том, чтобы создать случайный каталог и заключить его в полезную нагрузку и использовать его при следующих запросах.

Но в случае гостя сервер возвращает в качестве токена пустой объект.Возможно, потому что в БД не было пользователя.

Другая идея, о которой я думаю, - это создать случайного пользователя (добавить его в БД) и назначить ему случайный каталог каждый раз, когда пользователю необходимо использовать приложение в качестве гостя / анонима.Единственное, чего я боюсь при таком подходе, это то, что если в гостях тысячи гостей, то в БД должны быть созданы тысячи случайных пользователей.

Так что вы думаете?Есть ли другой и более эффективный способ справиться с этим?

Любая идея приветствуется.

...