如何在React和Express应用程序中设置新的谷歌认证

    Onuorah Bonaventure Chukwudi
    分享

    在本文中,您将学习如何在React.js和Express.js应用程序中配置新的谷歌认证“用谷歌登录”按钮。

    这种新方法简化了开发人员实现谷歌认证的方式。它带来了一些显著的优势,例如允许用户查看个人资料照片,以选择正确的谷歌帐户-这可以防止注册错误,并确保您的应用程序不会受到影响,当谷歌停止旧的“用谷歌登录JavaScript库于2023年3月31日发布。

    值得注意的是,新创建的客户端id现在被阻止使用旧的客户端id平台库谷歌认证必须以这种方式实现。

    以下是本文的源代码:服务器而且客户端

    生成一个谷歌客户端ID和秘密

    实现谷歌身份验证的第一步是为您正在创建的应用程序生成客户端ID和秘密。

    步骤1

    我们首先前往谷歌控制台

    谷歌控制台"加载="lazy

    步骤2

    点击上面突出显示的下拉菜单。之后,单击下面突出显示的新项目。

    添加新项目"加载="lazy

    步骤3

    添加项目名称。我选择了connect-google-auth-article

    添加项目名称"加载="lazy

    步骤4

    单击步骤1中的下拉菜单选择项目。

    选择项目"加载="lazy

    步骤5

    您看到的下一个屏幕应该类似于下面的示例。然后点击仪表板。

    前仪表板"加载="lazy

    步骤6

    下一步是配置oauth同意。要实现这一点,请将鼠标悬停在“api和服务”上,然后单击“OAuth同意屏幕”。

    前使"加载="lazy

    步骤7

    选择您想要的同意类型。我选择了外部和打击创建

    和谐"加载="lazy

    步骤8

    一旦设置了同意,点击凭证来设置你的应用细节。由于我的应用程序托管在本地主机上,我设置如下图所示的细节。

    应用程序类型,web应用程序;名称、connect-google-auth-article;URI1, http://localhost;URI2, http://localhost: 3000;"加载="lazy

    注意:当您准备好部署应用程序时,您应该将URI1和URI2替换为您想要使用的域名—例如https://example.com

    步骤9

    成功存储凭据后,可以复制或下载生成的客户端ID和Secret。

    oauth"加载="lazy

    安装React应用程序

    引导React.js应用程序最简单的方法是使用创建React应用

    因此,创建一个文件夹,命名为任何你想要的。然后打开终端,运行以下代码:NPX create-react-app app

    设置快速服务器

    在根目录下创建另一个文件夹。我在命名我的服务器.然后,打开一个终端,cd到服务器:光盘服务器

    之后,创建一个server.js文件,然后生成package.json通过运行NPM init -y.接下来,安装以下包:

    • Express.js:“一个最小且灵活的Node.js web应用程序框架,为web和移动应用程序提供了一组健壮的功能”。
    • CORS:一个Node.js包,用于提供一个Connect/Express中间件,该中间件可用于通过各种选项实现跨源资源共享。
    • Dotenv:加载环境变量的Node.js包.env文件。
    • Google-auth- Library:谷歌API的Node.js认证客户端库。
    • Jsonwebtoken:用于Node.js的JSON Web Token实现库。
    • Nodemon:一个简单的监控脚本,用于开发Node.js应用程序。

    可以执行以下命令安装上述软件包:

    npm安装Express cors dotenv google-auth-library jsonwebtoken nodemon

    之后,通过这样做配置你的脚本:

    / / package.json“脚本”“开始”“节点server.js”“开发”“nodemon server.js”

    你的package.json应该是这样的:

    / / package.json“名称”“connect-google-auth-article”“版本”“1.0.0”“描述”""“主要”“server.js”“脚本”“开始”“节点server.js”“开发”“nodemon server.js”“依赖”“歌珥”“^ 2.8.5”“dotenv”“^ 16.0.2”“表达”“^ 4.18.1”“google-auth-library”“^ 8.5.2”“jsonwebtoken”“^ 8.5.1”“nodemon”“^ 2.0.20”“关键词”“作者”""“许可证”“ISC”

    在此之后,将以下代码写入server.js和运行运行开发启动你的服务器:

    / / server.js常量表达需要“表达”常量应用程序表达需要“dotenv /配置”//配置从.env读取常量歌珥需要“歌珥”常量OAuth2Client需要“google-auth-library”常量jwt需要“jsonwebtoken”应用程序使用歌珥起源“http://localhost: 3000”方法“GET、POST、PUT、DELETE选项”应用程序使用表达jsonDB应用程序“5152”= >控制台日志“服务器运行在端口5152上”

    准备React应用程序

    为了准备我们的客户端应用程序,我们将添加谷歌脚本到我们的头部公共/ index . html文件:

    <!--index . html--><脚本srchttps://accounts.google.com/gsi/client异步推迟>脚本>

    我们的index . html文件应该是这样的:

    <!--index . html--><!文档类型超文本标记语言><超文本标记语言><><字符集utf - 8/><链接rel图标href% PUBLIC_URL % / ico。位于/><的名字视窗内容宽度=设备宽度,初始= 1/><的名字主题颜色内容# 000000/><的名字描述内容使用create-react-app创建的网站/><链接relapple-touch-iconhref% PUBLIC_URL % / logo192.png/><链接rel清单href% PUBLIC_URL % / manifest.json/><!--去ogle Signup/signin script --><脚本srchttps://accounts.google.com/gsi/client异步推迟>脚本><标题>反应的应用标题>><身体><noscript>您需要启用JavaScript来运行此应用程序。noscript><divid>div>身体>超文本标记语言>

    接下来,我们将在src屏幕而且钩子
    屏幕文件夹将包含五个文件:Home.jsxLanding.jsxLogin.jsxSignup.jsx而且index.js.的钩子文件夹将只包含一个文件:useFetch.jsx

    配置客户端路由

    我们将用于客户端路由的包是react-router-dom.打开一个新的终端,cd到应用程序中,并运行以下代码:NPM安装react-router-dom

    然后我们可以更新App.js看起来像这样:

    / / App.js进口反应useEffect“反应”进口useState“反应”进口BrowserRouter路线路线导航“react-router-dom”常量应用程序= >常量用户setUseruseState返回<BrowserRouter><路线></路线></BrowserRouter>出口默认的应用程序

    创建登录页面

    在我们的例子中,登录页面是对未经身份验证的用户可用的唯一页面。它将包含到注册和登录页面的链接。它看起来是这样的:

    / / Landing.jsx进口反应“反应”进口链接“react-router-dom”常量着陆= >返回<><标题样式textAlign“中心”><h1>欢迎我的世界</h1></><主要的风格显示“弯曲”justifyContent“中心”差距“2快速眼动”><链接“/注册”风格textDecoration“没有”边境1px纯灰色填充“0.5雷姆1快速眼动”写成backgroundColor“小麦”颜色“333 #”>标志向上</链接><链接“/登录”风格textDecoration“没有”边境1px纯灰色填充“0.5雷姆1快速眼动”写成backgroundColor“烟白”颜色“333 #”>登录</链接></主要></>出口默认的着陆

    让我们来分析一下:

    • 该组件返回一个由空标记表示的React片段元素。
    • 该片段包含两个元素:<标题>而且<大>.标头返回一个<标题>并将其中的文本居中,而main元素返回来自的两个链接react-router-dom并居中。
    • 为两个链接提供了不同的背景色,以提高用户体验。

    接下来,我们可以打开屏幕/ index.js文件并导出Landing.jsx像这样:

    / / index.js出口默认的作为着陆”。/着陆”

    之后,我们可以将它导入App.js文件,我们为它配置路由:

    / / App.js进口着陆”。/屏幕”

    另外:

    / / App.js<路线路径“/”元素用户?.电子邮件?<导航“/ home”/><着陆/>/>

    创建一个useFetch钩子

    一个是一种特殊的函数,它允许你使用React的功能。要创建钩子,打开钩子/ useFetch.jsx并添加以下代码:

    / / useFetch.jsx进口useState“反应”常量useFetchurl= >常量加载setLoadinguseState常量错误setErroruseState""常量handleGoogle异步响应= >控制台日志响应返回加载错误handleGoogle出口默认的useFetch

    创建注册页面

    打开屏幕/ Signup.jsx文件并添加以下代码:

    / / Signup.jsx进口反应useEffect“反应”进口链接“react-router-dom”进口useFetch“. . /钩/ useFetch”/ / https://developers.google.com/identity/gsi/web/reference/js-reference常量注册= >常量handleGoogle加载错误useFetch“http://localhost: 5152 /注册”useEffect= >/* global谷歌*/如果窗口谷歌谷歌账户id初始化client_id过程envREACT_APP_GOOGLE_CLIENT_ID回调handleGoogle谷歌账户idrenderButton文档getElementById“signUpDiv”// type: "standard",主题“filled_black”// size: "small",文本“continue_with”形状“药”/ / google.accounts.id.prompt ()handleGoogle返回<><导航样式填充“2快速眼动”><链接“/”>回来</链接></导航><标题样式textAlign“中心”><h1>注册继续</h1></><主要的风格显示“弯曲”justifyContent“中心”flexDirection“列”alignItems“中心”>错误&&<p风格颜色“红色”>错误</p>加载?<div>加载...</div><div id“signUpDiv”数据-文本“signup_with”></div></主要><页脚></页脚></>出口默认的注册

    让我们来分析一下:

    • 中提取可用的状态和函数useFetch钩。我们还将将调用的URL传递给服务器以处理登录。
    • useEffect,我们检查谷歌的脚本的可用性-由我们放入public.index.html文件。
    • 然后我们使用初始化方法处理身份验证按钮的功能。
    • 我们还传递一个回调函数,它已经在useFetch钩。

    接下来,我们将使用renderButton方法在屏幕上显示身份验证按钮。参数传递的第一个参数是按钮将嵌入其中的元素getElementById方法。接下来可以传递的参数用于自定义按钮的外观。它具有以下必需的设置:

    • 类型:这接受两个值-标准和图标。

    此外,它有可选的设置,包括以下:

    • 主题:按钮主题。它可以接受以下选项之一:filled_blue大纲,filled_black
    • 大小:定义按钮的大小。它接受媒介,
    • 文本:定义按钮文本。它接受下列条件之一:signin_withsignup_withcontinue_with,signin
    • 形状:定义按钮的形状。它接受矩形药丸,或广场
    • logo_alignment:定义图标如何放置在按钮中。它可以接受中心
    • 宽度:定义按钮的宽度。值得注意的是,最大宽度为400。

    另一个选择是语言环境,用于设置为特定的语言。

    我们还检查错误的可用性并将其显示给用户。我们还检查加载状态。

    创建登录页面

    登录页面类似于注册页面。唯一的区别是服务器URL和按钮文本。代码应该是这样的:

    / / Login.jsx进口反应useEffect“反应”进口链接“react-router-dom”进口useFetch“. . /钩/ useFetch”/ / https://developers.google.com/identity/gsi/web/reference/js-reference常量登录= >常量handleGoogle加载错误useFetch“http://localhost: 5152 /登录”useEffect= >/* global谷歌*/如果窗口谷歌谷歌账户id初始化client_id过程envREACT_APP_GOOGLE_CLIENT_ID回调handleGoogle谷歌账户idrenderButton文档getElementById“loginDiv”// type: "standard",主题“filled_black”// size: "small",文本“signin_with”形状“药”/ / google.accounts.id.prompt ()handleGoogle返回<><导航样式填充“2快速眼动”><链接“/”>回来</链接></导航><标题样式textAlign“中心”><h1>登录继续</h1></><主要的风格显示“弯曲”justifyContent“中心”flexDirection“列”alignItems“中心”>错误&&<p风格颜色“红色”>错误</p>加载?<div>加载...</div><div id“loginDiv”></div></主要><页脚></页脚></>出口默认的登录

    注意:google.accounts.id.prompt ()是用来自动要求用户登录立即他们打开你的网页。它可以放在根文件或登录页面中。

    同时创建一个.env.local文件,并添加以下内容:

    REACT_APP_GOOGLE_CLIENT_ID您的客户id

    中导出注册和登录页面screens.index.js文件:

    / / index.js……出口默认的作为登录”。/登录”出口默认的作为注册”。/注册”

    配置路由App.js文件:

    / / App.js进口着陆登录注册”。/屏幕”

    另外:

    / / App.js<路线路径“/注册”元素用户?.电子邮件?<导航“/ home”/><注册/>/><路线路径“/登录”元素用户?.电子邮件?<导航“/ home”/><登录/>/>

    更新useFetch

    谷歌身份验证返回带有JWT凭据的响应。但是,为了验证其真实性并为用户创建会话,我们将对服务器进行后续调用。我们应该更新钩子/ useFetch文件看起来像这样:

    / / useFetch.jsx常量handleGoogle异步响应= >setLoading真正的获取url方法“职位”“内容类型”“application / json”身体JSONstringify凭证响应凭证然后res= >setLoading返回resjson然后数据= >如果数据?.用户localStoragesetItem“用户”JSONstringify数据?.用户窗口位置重新加载错误数据?.消息||数据错误= >setError错误?.消息

    让我们来分析一下:

    创建注册和登录路由

    打开server.js文件。首先,我们将创建一个函数来验证我们将接收的凭证:

    / / server.js/** *验证谷歌帐号*/常量GOOGLE_CLIENT_ID过程envGOOGLE_CLIENT_ID常量客户端OAuth2ClientGOOGLE_CLIENT_ID异步函数verifyGoogleToken令牌试一试常量等待客户端verifyIdTokenidToken令牌观众GOOGLE_CLIENT_ID返回有效载荷getPayload错误返回错误"检测到无效用户。请再试一次”

    创建一个.env在服务器根目录下,添加如下内容:

    envGOOGLE_CLIENT_ID您的客户idJWT_SECRETmySecret

    接下来,创建注册路径:

    / / server.js应用程序帖子“/注册”异步要求的事情res= >试一试// console.log({verified: verifyGoogleToken(req.body.credential)});如果要求的事情身体凭证常量verificationResponse等待verifyGoogleToken要求的事情身体凭证如果verificationResponse错误返回res状态400json消息verificationResponse错误常量配置文件verificationResponse?.有效载荷DB配置文件res状态201json消息“注册成功”用户firstName配置文件?.given_name配置文件?.family_name图片配置文件?.图片电子邮件配置文件?.电子邮件令牌jwt标志电子邮件配置文件?.电子邮件“myScret”expiresIn“一维”错误res状态500json消息“发生错误。注册失败了。”

    同时创建登录路由:

    / / server.js应用程序帖子“/登录”异步要求的事情res= >试一试如果要求的事情身体凭证常量verificationResponse等待verifyGoogleToken要求的事情身体凭证如果verificationResponse错误返回res状态400json消息verificationResponse错误常量配置文件verificationResponse?.有效载荷常量existsInDBDB找到= >?.电子邮件= = =配置文件?.电子邮件如果existsInDB返回res状态400json消息“你没有登记。请报名吧。”res状态201json消息"登入成功"用户firstName配置文件?.given_name配置文件?.family_name图片配置文件?.图片电子邮件配置文件?.电子邮件令牌jwt标志电子邮件配置文件?.电子邮件过程envJWT_SECRETexpiresIn“一维”错误res状态500json消息错误?.消息||错误

    让我们来分析一下:

    更新App.js

    App.js的文件中,我们将更新该文件以检查本地存储使用以下代码:

    / / App.jsuseEffect= >常量使用localStoragegetItem“用户”如果使用&&使用包括“定义”setUserJSON解析使用

    创建Home.jsx

    Home.jsxFile是用户成功注册或登录后可用的页面:

    / / Home.jsx进口反应“反应”常量首页用户= >常量注销= >localStorageremoveItem“用户”窗口位置重新加载返回<div风格textAlign“中心”保证金“3快速眼动”><h1>亲爱的用户?.电子邮件</h1><p>正在查看页面,因为您已记录了日志或者你只是注册了</p><div><按钮onClick注销风格颜色“红色”边境1px纯灰色写成backgroundColor“白色”填充“0.5雷姆1快速眼动”光标“指针”>注销</按钮></div></div>出口默认的首页

    接下来,我们将从屏幕/ index.js文件是这样的:

    出口默认的作为首页“/ Home。”

    在此之后,我们将导入并设置它的路由App.js

    进口首页着陆登录注册”。/屏幕”

    另外:

    <路线路径“/ home”元素用户?.电子邮件?<首页用户用户/><导航“/”/>/>

    结论

    恭喜你!我们已经设置了新的谷歌身份验证。

    同样,源代码可以在这里找到:服务器而且客户端

    相关阅读:

    Express和MongoDB无服务器部署指南"></a>
         <div class= Express和MongoDB无服务器部署指南 Erik Kuckelheim
    创建React应用程序:快速准备React项目"></a>
         <div class= 创建React应用程序:快速准备React项目 帕维尔Jelisejevs
    用Express Generator在几分钟内创建新的Express.js应用程序"></a>
         <div class= 用Express Generator在几分钟内创建新的Express.js应用程序 保罗索维
    Express, Koa和happi .js的比较"></a>
         <div class= Express, Koa和happi .js的比较 Olayinka Omole
    构建一个node .js支持的聊天室Web应用程序:Express和Azure"></a>
         <div class= 构建一个node .js支持的聊天室Web应用程序:Express和Azure Rami Sayar
    Baidu