@ravshan01

Почему меняется id сессии в php?

Всем привет.
Написал простую кастомную авторизацию на laravel(чисто api)

Есть два роута
  • /auth
  • /auth/login

- /auth для проверки авторизован пользователь или нет
- /auth/login для авторизации

Всё работало когда тестил через insomnia или postman.
Начал делать фронт и такая проблема, что при каждом запросе меняется session_id, поэтому куки не принимаются(не находятся) и в сессии пусто из-за того-что сессия другая.

Авторизация реализована на сессиях и куках(без токенов)

Немного кода
class AuthController extends Controller
{
    public function auth(Request $request) {
        $user = AuthService::auth($request);

        if ($user) return CustomJsonResponse::create(true, [ 'user' => $user ]);
        return CustomJsonResponse::create(false, 'Вы не можете быть авторизованы', 400);
    }


    public function login(Request $request) {
        try {
            $requestUser = $request->json('user');
            $user = UserService::getUser($requestUser);
    
            if ( !$user ) {
                return CustomJsonResponse::create(false, 'Пользователь не найден', 400);
            }
            if ( !UserService::validateUser($requestUser) ) {
                return CustomJsonResponse::create(false, 'Неверный пароль', 400);
            }
    
            $response = CustomJsonResponse::create(true, ['user' => $user]);
            $response->withCookie('user', $user, 60 * 24 * 14, '/'); // 14 days
            $_SESSION['user'] = $user;
            
            return $response;
        } catch (\Throwable $th) {
            return $th;
            return CustomJsonResponse::create(false, 'Error', 500);
        }
    }


    public function logout() {
        $response = CustomJsonResponse::create(true, 'Пользователь деавторизован');
        $response->withoutCookie('user');
        unset( $_SESSION['user'] );        

        return $response;
    }
}

AuthService
class AuthService {

  public static function auth(Request $request) {
    if ( isset($_SESSION['user']) ) {
      $request['user'] = $_SESSION['user'];
      return $_SESSION['user'];
    }

    
    if ( $request->cookie('user') ) {
      $user_cookie = $request->cookie('user');
      $user = UserService::getUser($user_cookie);

      if ( $user && UserService::validateUser($user_cookie) ) {
        $_SESSION['user'] = $user;
        $request['user'] = $user;
        return $user;
      }
    }

    return null;
  }
  • Вопрос задан
  • 313 просмотров
Решения вопроса 1
part_os
@part_os
Сложное в простом
Ларавель насколько помню не использует $_SESSION
У него там фасад Session
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы