Besoin d'aide ?

laravel 8 et jwt token

Avatar de lidian
lidian

Bonjour, à tous, j'ai un souci sur laravel 8 et jwt token voici un peu le contexte J'ai deux api laravel 8 avec deux bases de données sur deux serveurs diffèrent que je vais appeler app 1 et app 2 et je dois pouvoir m'auto connecter avec le user 1 qui a id 5 sur app 1 et ce même user existe mais il a id 2 sur app 2 mais l'inverse n'est pas possible un utilisateur de app 2 ne peux pas ce conncter a app 1 de ce fait le sso n'est pas posible a moins que je me trompe ? . Le problème, c'est que laravel, mais automatiquement id de l'utilisateur courant id 5 dans le subject 'sub' du token et je n'arrive pas a surcharger cela alors qu'il faudrait que je lui donne id 2 dans le 'sub' du token , j'arrive à personnaliser le token en y ajoutant email par exemple et je récupère bien id du user 2 dans la base de donnes de app 2, mais a chaque fois laravel pass id du user 1 quelqu'un aurait t'il une idée

voici mon code ici au login je vais chercher dans la DB le user en fonction de sont email qui est unique et je met dans session les infos que je recupere et lance la fonction autoload qui creer un nouveau token

$app2User = DB::connection('mysql2')->table("users")->where('email', '=', $request->email)->pluck('id');
        if (count($app2User) > 0) {
            session(['app2UserId' => $app2User[0], 'app2UserEmail' => $request->email]);
            $this->autoload();

        } else {
            log::info('is null');
        }
        session(['optisiloUserEmail' => $request->email]);
        
         return $this->createNewToken($token);

Fonction autoload dans laquel je met le token creer dans session app2UserToken pour le transmettre a ma fonction createNewToken qui me renvoi un json avec le token du user courant et access_token destiner a app2 pour ce connecter

 public function autoload()
    {
        $id = session('optisiloUserId');
        $email = session('optisiloUserEmail');
        $payload = JWTFactory::sub($id)->email($email)->make();
        $token = JWTAuth::encode($payload);
        session(['app2UserToken' =>  $token->get()]);
    }
  protected function createNewToken($token)
    {
        return response()->json([
            'token' => $token,
            'access_token' => session('optisiloUserToken'),
            'token_type' => 'bearer',
            'expires_in' => Auth::factory()->getTTL() * 60,
            'user' => User::where('id', Auth::id())
        ]);
    }
}

j'ai essayer ceci dans le model User mais du coup cela fonctionne sur app 2 mais plus sur app1 car le sub prend id du user de app 2 c'est la fonction $this->getKey() qui recuperer la primaryKey soit id du user courant

 public function getJWTIdentifier()
    {
     $id = $this->getKey();
        $res = User::where('id', $id)->pluck('id_user_app2')[0];
        if ($res === null) {
            return $this->getKey();
        } else {
            return $res;
        }
    }

comment pourrait on override le sub du token ou ou lui indiquer qui met id 5 dans le token et id 2 dans access_token ?

Posté il y a 3 mois

Vous ne pouvez pas répondre à ce sujet.