gpt4 book ai didi

laravel - 在没有 session 的情况下使用 Laravel Socialite 和 jwt-auth

转载 作者:行者123 更新时间:2023-12-02 02:44:57 26 4
gpt4 key购买 nike

简短版本:在不使用 session 的情况下,将 Facebook 登录(laravel/socialite)生成的 JWT 发送到 angularjs 前端的适当方法是什么。

长版我正在制作一个具有 angularjs 前端和 laravel 5.2 后端的应用程序。我使用 tymondesigns/jwt-auth 进行身份验证而不是 session 。

我还使用 laravel/socialite 进行社交 Facebook 身份验证。为此,我使用社交名流的无状态功能,这样我就不需要以任何方式进行 session 。

基本身份验证运行良好。但是,当我尝试使用 Facebook 登录时,我按照以下步骤操作

  1. 用户单击有角一侧的按钮,该按钮会重定向到后端的提供商登录页面。

公共(public)函数redirectToProvider() {
return Socialite::with('facebook')->stateless()->redirect();
}
2. 用户给出他的登录信息。登录后,他被重定向到我的handlecallback函数。

        try {
$provider = Socialite::with('facebook');

if ($request->has('code')) {
$user = $provider->stateless()->user();
}

} catch (Exception $e) {
return redirect('auth/facebook');
}

return $this->findOrCreateUser($user);
  • 接下来我使用 findorcreate 函数来确定用户是否存在。如果不是,我只需创建一个新用户并从中创建 JWT。

        $user = User::where('social_id', '=', $facebookUser->id)->first();

    if (is_object($user)) {
    $token = JWTAuth::fromUser($user);
    return redirect()->to('http://localhost:9000/#/profile?' . 'token=' . $token);#angular
    } else {
    $result = array();
    $result['name'] = $facebookUser->user['first_name']
    $result['email'] = $facebookUser->user['email'];
    $result['social_id'] = $facebookUser->id;
    $result['avatar'] = $facebookUser->avatar;
    $result['gender'] = $facebookUser->user['gender'];
    $result['status'] = 'active';
    $result['login_type'] = 'facebook';
    $result['user_type'] = 'free_user';

    try {
    $user = User::create($result);
    } catch (Exception $e) {
    return response()->json(['error' => 'User already exists.'], HttpResponse::HTTP_CONFLICT);
    }
    $token = JWTAuth::fromUser($user);
    return redirect()->to('http://localhost:9000/#/profile?' . 'token=' . $token);#angular
    }
  • 我的问题是,在最后一个代码块中,我必须通过 url 将 jwt 发送到我的前端。这根本不安全。在不使用 session 的情况下将生成的 JWT 发送到前端的正确方法是什么?谢谢

    最佳答案

    official documentation of Laravel Socialite说:

    无状态身份验证

    无状态方法可用于禁用 session 状态验证。当向 API 添加社交身份验证时,这非常有用:

    return Socialite::driver('google')->stateless()->user();

    然后,您可以使用jwt-auth方法进行身份验证:

    JWTAuth::fromUser($user)

    关于laravel - 在没有 session 的情况下使用 Laravel Socialite 和 jwt-auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35998403/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com