在 React 项目中使用 Auth0 并集成到后端服务的配置步骤详解

 更新时间:2024年07月08日 12:06:57   作者:B.-  
这篇文章主要介绍了在 React 项目中使用 Auth0 并集成到后端服务的配置步骤详解,通过本文详细步骤,您可以将 Auth0 集成到 React 项目并与后端服务交互,需要的朋友可以参考下

在 React 项目中使用 Auth0 并集成到后端服务的配置步骤如下:

1. 在 Auth0 创建应用程序

  • 登录到 Auth0 Dashboard.
  • 导航到 “Applications” (应用程序) 部分并点击 “Create Application” (创建应用程序).
  • 为您的应用程序命名并选择应用类型为 “Single Page Web Applications” (单页 Web 应用).
  • 点击 “Create” (创建).

2. 配置 Auth0 应用程序

1.在应用程序的设置页面, 设置以下字段:

  • Allowed Callback URLs: http://localhost:3000/callback (开发环境的本地地址)
  • Allowed Logout URLs: http://localhost:3000 (开发环境的本地地址)
  • Allowed Web Origins: http://localhost:3000 (开发环境的本地地址)

2.保存更改。

3. 在 React 项目中安装 Auth0 SDK

在 React 项目根目录下,打开终端并运行:

npm install @auth0/auth0-react

4. 在 React 项目中配置 Auth0

创建一个名为 auth_config.json 的文件,包含以下内容:

{
  "domain": "YOUR_AUTH0_DOMAIN",
  "clientId": "YOUR_AUTH0_CLIENT_ID",
  "audience": "YOUR_API_IDENTIFIER"
}

src 目录下创建一个名为 auth0-provider-with-history.js 的文件:

import React from "react";
import { useNavigate } from "react-router-dom";
import { Auth0Provider } from "@auth0/auth0-react";
import config from "./auth_config.json";
const Auth0ProviderWithHistory = ({ children }) => {
  const navigate = useNavigate();
  const onRedirectCallback = (appState) => {
    navigate(appState?.returnTo || window.location.pathname);
  };
  return (
    <Auth0Provider
      domain={config.domain}
      clientId={config.clientId}
      audience={config.audience}
      redirectUri={window.location.origin}
      onRedirectCallback={onRedirectCallback}
    >
      {children}
    </Auth0Provider>
  );
};
export default Auth0ProviderWithHistory;

src/index.js 文件中使用 Auth0ProviderWithHistory 包裹应用程序:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import Auth0ProviderWithHistory from './auth0-provider-with-history';
import App from './App';
ReactDOM.render(
  <BrowserRouter>
    <Auth0ProviderWithHistory>
      <App />
    </Auth0ProviderWithHistory>
  </BrowserRouter>,
  document.getElementById('root')
);

5. 在 React 组件中使用 Auth0

使用 useAuth0 钩子访问 Auth0 认证状态:

import React from "react";
import { useAuth0 } from "@auth0/auth0-react";
const Profile = () => {
  const { user, isAuthenticated, isLoading } = useAuth0();
  if (isLoading) {
    return <div>Loading...</div>;
  }
  return (
    isAuthenticated && (
      <div>
        <img src={user.picture} alt={user.name} />
        <h2>{user.name}</h2>
        <p>{user.email}</p>
      </div>
    )
  );
};
export default Profile;

创建登录和登出按钮:

import React from "react";
import { useAuth0 } from "@auth0/auth0-react";
const LoginButton = () => {
  const { loginWithRedirect } = useAuth0();
  return <button onClick={() => loginWithRedirect()}>Log In</button>;
};
const LogoutButton = () => {
  const { logout } = useAuth0();
  return <button onClick={() => logout({ returnTo: window.location.origin })}>Log Out</button>;
};
export { LoginButton, LogoutButton };

6. 集成到后端服务

在后端服务中验证 JWT 令牌。以 Go 为例,使用 github.com/auth0/go-jwt-middlewaregithub.com/form3tech-oss/jwt-go

package main
import (
  "net/http"
  "github.com/auth0/go-jwt-middleware"
  "github.com/dgrijalva/jwt-go"
  "github.com/gorilla/mux"
)
var myJwtMiddleware = jwtmiddleware.New(jwtmiddleware.Options{
  ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
    audience := "YOUR_API_IDENTIFIER"
    checkAud := token.Claims.(jwt.MapClaims).VerifyAudience(audience, false)
    if !checkAud {
      return token, fmt.Errorf("invalid audience")
    }
    iss := "https://YOUR_AUTH0_DOMAIN/"
    checkIss := token.Claims.(jwt.MapClaims).VerifyIssuer(iss, false)
    if !checkIss {
      return token, fmt.Errorf("invalid issuer")
    }
    cert, err := getPemCert(token)
    if err != nil {
      return nil, err
    }
    return jwt.ParseRSAPublicKeyFromPEM([]byte(cert))
  },
  SigningMethod: jwt.SigningMethodRS256,
})
func main() {
  r := mux.NewRouter()
  r.Handle("/api/private", myJwtMiddleware.Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("This is a private endpoint"))
  })))
  http.ListenAndServe(":8080", r)
}
func getPemCert(token *jwt.Token) (string, error) {
  // Implementation to get the PEM certificate
}

在 React 项目中,使用 getAccessTokenSilently 方法获取访问令牌并将其添加到 API 请求的 Authorization 头部:

import React from "react";
import { useAuth0 } from "@auth0/auth0-react";
import axios from "axios";
const CallApi = () => {
  const { getAccessTokenSilently } = useAuth0();
  const callApi = async () => {
    try {
      const token = await getAccessTokenSilently();
      const response = await axios.get("http://localhost:8080/api/private", {
        headers: {
          Authorization: `Bearer ${token}`,
        },
      });
      console.log(response.data);
    } catch (error) {
      console.error(error);
    }
  };
  return <button onClick={callApi}>Call API</button>;
};
export default CallApi;

通过以上步骤,您可以将 Auth0 集成到 React 项目并与后端服务交互。

到此这篇关于在 React 项目中使用 Auth0 并集成到后端服务的配置步骤的文章就介绍到这了,更多相关React 使用 Auth0 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于React封装组件的实现步骤

    基于React封装组件的实现步骤

    很多小伙伴在第一次尝试封装组件时会和我一样碰到许多问题,本文主要介绍了基于React封装组件的实现步骤,感兴趣的可以了解一下
    2021-11-11
  • React中使用axios发送请求的几种常用方法

    React中使用axios发送请求的几种常用方法

    本文主要介绍了React中使用axios发送请求的几种常用方法,主要介绍了get和post请求,具有一定的参考价值,感兴趣的可以了解一下
    2021-08-08
  • react component function组件使用详解

    react component function组件使用详解

    这篇文章主要为大家介绍了react component function组件的使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • react解决 Hooks 闭包陷阱的问题

    react解决 Hooks 闭包陷阱的问题

    本文主要介绍了react解决 Hooks 闭包陷阱的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-05-05
  • react项目打包后点击index.html页面出现空白的问题

    react项目打包后点击index.html页面出现空白的问题

    这篇文章主要介绍了react项目打包后点击index.html页面出现空白的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • React使用Context与router实现权限路由详细介绍

    React使用Context与router实现权限路由详细介绍

    这篇文章主要介绍了React使用Context与router实现权限路由的详细过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-01-01
  • React组件的用法概述

    React组件的用法概述

    React组件用来实现局部功能效果的代码和资源的集合(html/css/js/image等等),这篇文章主要介绍了React组件的用法和理解,需要的朋友可以参考下
    2023-02-02
  • React useImperativeHandle处理组件状态和生命周期用法详解

    React useImperativeHandle处理组件状态和生命周期用法详解

    React Hooks 为我们提供了一种全新的方式来处理组件的状态和生命周期,useImperativeHandle是一个相对较少被提及的Hook,但在某些场景下,它是非常有用的,本文将深讨useImperativeHandle的用法,并通过实例来加深理解
    2023-09-09
  • react调试和测试代码的小技巧

    react调试和测试代码的小技巧

    在开发React应用时,严格模式StrictMode可以帮助开发者捕捉到组件中的错误和潜在问题,安装React Developer Tools浏览器扩展检查组件的props和状态,直接修改以及分析性能,@testing-library/react和Cypress或Playwright等工具可以有效地测试React组件和执行端到端测试
    2024-10-10
  • 详解超简单的react服务器渲染(ssr)入坑指南

    详解超简单的react服务器渲染(ssr)入坑指南

    这篇文章主要介绍了详解超简单的react服务器渲染(ssr)入坑指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02

最新评论