带有 Laravel 后端和 React Native 应用程序的 Facebook 和 JWT Auth

Posted

技术标签:

【中文标题】带有 Laravel 后端和 React Native 应用程序的 Facebook 和 JWT Auth【英文标题】:Facebook and JWT Auth w/ Laravel back-end and React Native app 【发布时间】:2017-10-29 07:25:34 【问题描述】:

我已经建立了一个带有 vuejs 前端和 laravel 后端的网站。

登录的唯一方式是通过 Facebook 使用 Socialite 登录

一切正常。

现在我正在构建一些 React Native 应用程序(ios/android),它们也使用 Facebook 登录,但需要与相同的 Web api 交互。

我想使用 JWT 来保护 React Native 的 API -> Laravel API

我在 Laravel 端设置了带有 Dingo 的 JWT,并且能够使用 JWTAuth::fromUser() 生成令牌。而且我已经建立了一些使用令牌进行身份验证的 API 端点.. 到目前为止一切顺利。

现在是变粘的部分。我知道在 Laravel 方面,您可以使用 any 用户创建 JWT 令牌。现在 JWT“标识符”只是“id”。我理解我生成的令牌是从JWTAuth::fromUser() 根本不知道也不关心这个用户没有传统的凭据,而是使用了 Facebook 登录。

然而,在 React Native 方面.. 当一个新用户首次通过 Facebook 登录进行身份验证时.. 它不知道 Laravel 应用程序上的“匹配用户”是什么,我所要做的基本上就是唯一的 Facebook提供者 ID。

所以问题如下:

如何仅使用 Facebook Provider Id 和 JWT Secret 在 React Native 端生成 JWT 令牌,更重要的是,如何在 Laravel 端修改我的 JWT 代码,以便它可以理解生成的令牌使用 Facebook 提供商 ID 和 JWT 令牌

换句话说,我认为我的 Laravel JWT 实现需要修改,以便纯粹基于 Facebook Provider Id 创建/解析令牌,否则它将与在 React Native 端生成的令牌不匹配。

非常感谢!!

【问题讨论】:

当我之前实现了 Facebook 登录时,我从 Facebook 请求用户的姓名、电子邮件等,然后在数据库中创建一个用户帐户,其唯一的 Facebook 应用程序 ID 与该帐户相关联。然后在以后重新认证时,再次获取他们的ID,并在您的数据库中找到相应的帐户并加载该用户。 【参考方案1】:

好的,在阅读了一些内容之后,我认为这个流程可能会奏效。请问你的想法?

1 用户在 Android/Ios 应用上通过 Facebook 进行身份验证

2 获取 facebook 访问令牌

3 对 web 服务器上的公共端点进行 api 调用并传递 FB Access Token 和 FB ID

4a Web 服务器使用 Access Token 调用 Facebook Graph Api 并验证令牌是否有效,通过 Facebook 应用程序进行身份验证,并匹配 Facebook ID

4b 如果用户首先在网络上不存在.. 创建用户

5 如果以上匹配,则 Web 服务器从用户模型生成 JWT 令牌并将 JWT 令牌返回给应用程序

6 应用现在使用 JWT 令牌进行未来的 API 调用

【讨论】:

感谢分享! 如何从应用中获取令牌? @JustAnotherDeveloper 有一些软件包可以完成这项工作。如果您使用 expo,您可以简单地使用 docs.expo.io/versions/latest/sdk/facebook

以上是关于带有 Laravel 后端和 React Native 应用程序的 Facebook 和 JWT Auth的主要内容,如果未能解决你的问题,请参考以下文章

基于 Laravel API 后端和 Vuejs 前端构建

两个独立的 Heroku(Node 后端和 React 前端)之间的通信?

如何将 Laravel 项目转换为 laravel api?

如何使用分离的后端和前端(Passport / Express / React)进行社交身份验证

post 方法在 laravel 8 中无法使用 react native for android

带有 JavaScript 后端和前端的多人游戏。最佳实践是啥?