2
votes

Here is a code in config/auth.php

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'jwt',
        'provider' => 'users',
        'hash' => false,
    ],
    'client' => [
        'driver' => 'jwt',
        'provider' => 'clients',
    ]
],

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'clients' => [
        'driver' => 'eloquent',
        'model' => App\Client::class,
    ],
],

My login function doesnt have a problem with this code for different login user :

config()->set('auth.defaults.guard', 'client');
Config::set('jwt.user', 'App\Client');
Config::set('auth.providers.clients.model', Client::class);

Here is my logout function :

function logout(Request $request)
{
    $this->validate($request, ['token' => 'required']);
    Config::set('jwt.user', 'App\Client');
    Config::set('auth.providers.clients.model', Client::class);
    try {
        JWTAuth::invalidate(JWTAuth::getToken());
        return response()->json(['success' => true]);
    } catch (JWTException $e) {
        return response()->json(['success' => false, 'error' => 'Failed to logout'], 500);
    }
}

I'm using Laravel 6 and tymon/jwt-auth "1.0.0-rc.5.1"

2

2 Answers

2
votes

If you have one token table for both user and client then you can do like this...For logout you just have to delete the token from token table... Simple way =>

public function logOut($id) {
        if (Auth::check()) {
            $user = Auth::user();
            Token::where('user_id',$user->id)
                    ->where(external identification)
                    ->delete();
            $response = [
                    'status' => true,
                    'message' => 'Successfully Logged Out',
            ];
            return response()->json($response); //@ sending response
        } else {
            $response = [
                    'status' => false,
                    'message' => 'Bad Request!',
            ];
            return response()->json($response); //@ sending response
        }                     
    }
0
votes

you can make it simpler with with the Auth/laravel

    public function logoutapp(){
      $user = Auth::user();
      $userid =$user->id;
      DB::table('oauth_access_tokens')->where('user_id', $userid)->update(['revoked' => true]);
    return Response::json(array('succes' => true, 'data' => 'Logout succesfully!'), 200);
}