【发布时间】:2016-06-30 03:11:03
【问题描述】:
短版:在不使用会话的情况下,将 Facebook 登录(laravel/socialite)生成的 JWT 发送到 angularjs 前端的合适方法是什么。
加长版 我正在制作一个具有 angularjs 前端和 laravel 5.2 后端的应用程序。我正在使用 tymondesigns/jwt-auth 进行身份验证而不是会话。
我还使用 laravel/socialite 进行社交 Facebook 身份验证。为此,我正在使用社交名流的无状态功能,因此我不需要任何方式的会话。
基本身份验证完美运行。但是,当我尝试使用 Facebook 登录时,我会按照以下步骤操作
- 用户单击棱角侧的按钮会重定向到后端的提供商登录页面。
public function 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 发送到我的前端。这根本不安全。在不使用会话的情况下将生成的 JWT 发送到前端的正确方法是什么?谢谢
【问题讨论】:
-
您解决了吗?同样的问题也出现在我们的应用程序中。
-
在 cookie 中存储令牌也不是一个坏主意。在您的回调处理程序中,您应该设置一个带有令牌的 cookie。
标签: laravel authentication oauth jwt