Next.js 集成 Auth0 登入和自定义登入页面

Next.js 集成 Auth0 和自定义登入页面

      • 注册账号和基本配置
        • 进入 auth0 官网注册账号并登入
        • 进入控制台后访问 ` Applications/Applications`
        • 进入程序配置页面添加配置
      • 在 Next.js 使用
        • 在项目中集成
      • 通过 Auth0Lock 配置方式自定义登入页面
        • 效果展示
        • 实现过程

注册账号和基本配置

进入 auth0 官网注册账号并登入

Auth0: Secure access for everyone. But not just anyone.

进入控制台后访问 Applications/Applications

image.png

image.png

进入程序配置页面添加配置

创建完成后,会跳转到应用配置界面,如果不小心关闭,可以在 Applications 找到对应的程序并进入:
image.png
跳转后的程序配置页面:
image.png
下滑找到 **Application URIs **配置项:

  • 设置 Allowed Callback URLshttp://localhost:3000/api/auth/callback
  • 设置 Allowed Logout URLshttp://localhost:3000/

image.png

在 Next.js 使用

打开 Next.js 项目,安装 auth0 依赖:

npm install @auth0/nextjs-auth0

新建 .env.local 文件,并添加环境变量,auth0 会自定验证你配置的 env 文件

# A long secret value used to encrypt the session cookie.
# node -e "console.log(crypto.randomBytes(32).toString('hex'))"
AUTH0_SECRET='4d98dac96fb455a6003547a9ffb1e56239598789a5ed7eb1ec34d0834d00c71e'# The base URL of your application
AUTH0_BASE_URL='http://localhost:3000'
# The URL of your Auth0 Application Domain (https://)
AUTH0_ISSUER_BASE_URL='https://dev-jkr****flrex.us.auth0.com'
# Your Auth0 application's Client ID
AUTH0_CLIENT_ID='pvYBK9T514********CEMaql12GhY'
#Your Auth0 application's Client Secret.
AUTH0_CLIENT_SECRET='gc2vtfBKqRKqWYdsZbteS1zXU1m7d_IJeEJs9E1cm7SUZgfbJeJNVZ6UMgunXqk0'
  • AUTH0_SECRET 是一个自定义密钥,理论上可以随意填写,但不建议,你可以通过终端使用下面命令生成一个32位的随机字符串,并拷贝到 .env.local 文件中
node -e "console.log(crypto.randomBytes(32).toString('hex'))"

image.png

  • AUTH0_BASE_URL 你开发的项目地址,Next.js 本地运行环境为3000端口, 所以这里设置为 http://localhost:3000
  • AUTH0_ISSUER_BASE_URL 对应在 auth0 创建的应用程序配置中的 Domain,参考下图, 注意在env文件配置时,开头需要加上 https://
  • AUTH0_CLIENT_ID 见下图,对应 Client ID
  • AUTH0_CLIENT_SECRET 见下图,对应 Client Secret

image.png

在项目中集成

Next.js 提供了详细文档和示例文件,帮助你快速集成 auth0,你可以下载示例文件,配置env 文件后快速体验

  • Auth0 Next.js SDK Quickstarts: Add Login to your Next.js application

image.png

根据提示配置:
image.png

其它参考链接:

  • Auth0 React SDK Quickstarts: Add Login to your React App

通过 Auth0Lock 配置方式自定义登入页面

效果展示

image.png

实现过程

登入 auth0 控制台后,进入 Branding/Universal Login 页面,下滑页面后找到 Advanced Options 选项,点击进入
image.png

进入后,默认会跳转到 Settings 选项页,不要看! 也别点击任何操作!这个页面完全就是混淆你的理解,且提供的两个模板都又丑又难改配置,设置个 logo 各种不符合要求,想设置个样式直接把你恶心死!

切换到 Login 选项页面:
image.png

然后我们愉快的写 HTML 文件就好了,终于——舒服了。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>Login - MontCache</title><link rel="icon" href="https://www.montplex.com/favicon.ico" type="image/x-icon"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" />
</head><style>  body{margin: 0;padding: 0;}.auth0-lock.auth0-lock {font: inherit!important}.auth0-lock.auth0-lock .auth0-lock-center {font: inherit!important;padding: 0!important}.auth0-lock.auth0-lock .auth0-lock-header,.auth0-lock.auth0-lock .auth0-lock-terms {display: none!important}.auth0-lock.auth0-lock .auth0-lock-submit {padding: 2px!important;background: #111!important}.auth0-lock.auth0-lock .auth0-lock-submit .auth0-label-submit {display: inline-flex!important;align-items: center!important}.auth0-lock.auth0-lock .auth0-lock-submit span svg.icon-text {margin: 0 0 0 8px!important}.montcache-login-page {background-color: rgb(244 244 245);display: grid;min-height: 100vh;place-items: center;/*padding: 32px;*/}.montcache-login-page-logo {margin-bottom: 20px;display: flex;align-items: center;justify-content: center;}.montcache-login-page-privacy{margin-top: 24px;max-width: 640px;text-align: center;font-size: 14px;}.montcache-login-page-privacy p{color: rgb(63, 63, 70);}.montcache-login-page-privacy a{text-decoration-line: underline;color: rgb(63, 63, 70);}.montcache-login-page-privacy .alert{background-color: #fffbe6;border: 1px solid #ffe58f;margin-top:16px;box-sizing: border-box;padding: 8px 12px;font-size: 14px;line-height: 1.57;list-style: none;position: relative;display: flex;align-items: center;word-wrap: break-word;border-radius: 8px;}</style>
<body><div class="montcache-login-page"><div><div class="montcache-login-page-logo"><div style="display: flex; align-items: center;gap: 8px;"><svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><defs><linearGradient id="logosNextjsIcon0" x1="55.633%" x2="83.228%" y1="56.385%" y2="96.08%"><stop offset="0%" stop-color="#FFF"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><linearGradient id="logosNextjsIcon1" x1="50%" x2="49.953%" y1="0%" y2="73.438%"><stop offset="0%" stop-color="#FFF"/><stop offset="100%" stop-color="#FFF" stop-opacity="0"/></linearGradient><circle id="logosNextjsIcon2" cx="128" cy="128" r="128"/></defs><mask id="logosNextjsIcon3" fill="#fff"><use href="#logosNextjsIcon2"/></mask><g mask="url(#logosNextjsIcon3)"><circle cx="128" cy="128" r="128"/><path fill="url(#logosNextjsIcon0)" d="M212.634 224.028L98.335 76.8H76.8v102.357h17.228V98.68L199.11 234.446a128.433 128.433 0 0 0 13.524-10.418"/><path fill="url(#logosNextjsIcon1)" d="M163.556 76.8h17.067v102.4h-17.067z"/></g></svg><h3 style="font-size: 22px;">Next.js Auth0</h3></div></div><div id="montcache-login-container"></div><div class="montcache-login-page-privacy"><p style="color: rgb(63, 63, 70);">By clicking Log In, you agree to our<ahref="/trust/terms.pdf"target="_blank"children="Terms of Service">Terms of Service</a>and <ahref="/trust/privacy.pdf"target="_blank">Privacy Policy</a>.</p><div class="alert"><div style="color: rgba(124,45,18,.8);flex: 1;font-wight: 300;">We have recently made updates to our Terms of Service.<br>Please take a moment to review the changes that have been implemented.</div></div></div></div></div><!--[if IE 8]><script src="//cdnjs.cloudflare.com/ajax/libs/ie8/0.2.5/ie8.js"></script><![endif]--><!--[if lte IE 9]><script src="https://cdn.auth0.com/js/base64.js"></script><script src="https://cdn.auth0.com/js/es5-shim.min.js"></script><![endif]--><script src="https://cdn.auth0.com/js/lock/12.4/lock.min.js"></script><script>// Decode utf8 characters properlyvar config = JSON.parse(decodeURIComponent(escape(window.atob('@@config@@'))));config.extraParams = config.extraParams || {};var connection = config.connection;var prompt = config.prompt;var languageDictionary;var language;if (config.dict && config.dict.signin && config.dict.signin.title) {languageDictionary = { title: config.dict.signin.title };} else if (typeof config.dict === 'string') {language = config.dict;}var loginHint = config.extraParams.login_hint;var colors = config.colors || {};// Available Lock configuration options: https://auth0.com/docs/libraries/lock/lock-configurationvar lock = new Auth0Lock(config.clientID, config.auth0Domain, {auth: {redirectUrl: config.callbackURL,responseType: (config.internalOptions || {}).response_type ||(config.callbackOnLocationHash ? 'token' : 'code'),params: config.internalOptions},// 关闭输入账号密码后自动获取用户头像功能avatar: null,configurationBaseUrl: config.clientConfigurationBaseUrl,overrides: {__tenant: config.auth0Tenant,__token_issuer: config.authorizationServer.issuer},assetsUrl:  config.assetsUrl,container: 'montcache-login-container',allowedConnections: connection ? [connection] : null,rememberLastLogin: !prompt,language: language,languageBaseUrl: config.languageBaseUrl,languageDictionary: languageDictionary,theme: {primaryColor:    '#000'},prefill: loginHint ? { email: loginHint, username: loginHint } : null,closable: false,defaultADUsernameFromEmailPrefix: false});lock.show()</script>
</body>
</html>

配置参考🔗:

  • https://auth0.com/docs/libraries/lock/lock-configuration

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/620159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

scroll-view在小程序页面里实现滚动,uniapp项目

要实现红框中的区域进行滚动,scroll-view必须写高 <template><!-- 合同-待确认 --><view class"viewport"><!-- 上 --><view class"top-box"><!-- tab --><view class"tabs"><textv-for"(ite…

Alibaba-> EasyExcel 整理3

1 导入依赖 <!-- easyExcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version >3.2.1</version><exclusions><exclusion><artifactId>poi-ooxml-schemas</art…

what is BERT?

BERT Introduction Paper 参考博客 9781838821593_ColorImages.pdf (packt-cdn.com) Bidirectional Encoder Representation from Transformer 来自Transformer的双向编码器表征 基于上下文&#xff08;context-based&#xff09;的嵌入模型。 那么基于上下文&#xff08;…

【MySQL性能优化】- MySQL结构与SQL执行过程

MySQL结构与SQL执行过程 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正…

开源了一款Vue3 Ts Vite4 uni-app 驱动的跨端快速启动模板

一、开源项目简介 由 Vue3 & Ts & Vite4 & uni-app 驱动的跨端快速启动模板。推荐使用 VSCode 编辑器开发&#xff0c;集成了 Prettier ESLint StyleLint husky lint-staged commitlint UnoCSS Vue3 TypeScript Vite4 setup&#xff0c;开箱即用。 二、…

【计算机组成原理】程序的转换及机器级表示 常用计算机术语英文缩写汇总

编码 二进制编码的十进制数&#xff08;BCD&#xff09;&#xff1a;Binary Coded Decimal美国信息交换标准代码&#xff08;ASCII&#xff09;&#xff1a;American Standard Code for Information Interchange 数据的排列顺序 最低有效位&#xff08;LSB&#xff09;&…

全链路追踪关键技术-TraceId、SpanId生成规则

链路追踪的traceid原理梳理 如何追踪微服务调用&#xff1f; ● traceId&#xff0c;用于标识某一次具体的请求ID。当用户的请求进入系统后&#xff0c;会在RPC调用网络的第一层生成一个全局唯一的traceId&#xff0c;并且会随着每一层的RPC调用&#xff0c;不断往后传递&…

day17 平衡二叉树 二叉树的所有路径 左叶子之和

题目1&#xff1a;110 平衡二叉树 题目链接&#xff1a;110 平衡二叉树 题意 判断二叉树是否为平衡二叉树&#xff08;每个节点的左右两个子树的高度差绝对值不超过1&#xff09; 递归遍历 递归三部曲 1&#xff09;确定递归函数的参数和返回值 2&#xff09;确定终止条…

uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义

使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 <scroll-view class"contentshow" scroll-y :show-scrollbartrue :enhancedtrue><view class"content" :show-scrollbartrue><text>{{vehicleCartinfo}}<…

【动态规划】LeetCode-42. 接雨水

42. 接雨水。 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1…

Quartus 软件界面介绍与部分使用技巧

内容太多&#xff0c;只能慢慢补充完善了~ 对一个软件的熟练掌握&#xff0c;不仅在于完成项目工程&#xff0c;还在于对一个软件的各个功能的位置与使用要熟稔于心&#xff08;个人看法&#xff09;。 软件界面 默认打开的软件界面如下&#xff1a; 关掉所有能关闭的窗口&am…

怎么安装IK分词器

.安装IK分词器 1.在线安装ik插件&#xff08;较慢&#xff09; # 进入容器内部 docker exec -it elasticsearch /bin/bash ​ # 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.12.1/elastics…

学习笔记-数据容器:dict(字典)

一.字典的定义 1.语法 使用{ }存储原始&#xff0c;每一个元素是一个键值对每一个键值对包含Key和Value&#xff08;用冒号分隔&#xff09;键值对之间使用逗号分隔Key和Value可以是任意类型的数据&#xff08;key不可为可变类型(列表集合字典)&#xff09;Key不可重复&#…

Oracle数据库 CentOS7上修改hostname后无法启动解决办法

目录 一、问题背景 二、解决问题 三、重启数据库 四、重启监听 一、问题背景 CentOS系统需要修改hostname&#xff0c;修改后oracle数据库无法启动和正常运行。 系统&#xff1a;CentOS7.3 数据库版本&#xff1a;Oracle 11g Express Edtion 二、解决问题 通过which orac…

提交代码,SVN被锁定,提示:svn is already locked解决方案

今天遇到一个问题&#xff0c;svn 在提交代码的时候出现了svn is already locked&#xff0c;解决方案如下图 点击clean up 点击ok即可 来看官方对clean up的解释&#xff1a;它的作用就是查找工作拷贝中的所有遗留的日志文件&#xff0c;删除进程中工作拷贝的锁。 参考&…

tl431几种不常见的接法

tl431可调电源电路图分析 精密电压基准IC TL431是我们常见的精密电压基准IC &#xff0c;应用非常广泛。其输出压连续可调达36V&#xff0c;工作电流范围宽达0.1--100mA&#xff0c;动态电阻典型值为0.22欧&#xff0c;输出杂波低。图1是利用它作电压基准和驱动外加场效应管K7…

(学习日记)2024.01.09

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

Springboot WebFlux项目结合mongodb进行crud

第一步&#xff1a;创建项目 第二步&#xff1a;给mongodb插入数据 第三步&#xff1a;创建实体类 package org.cyl.test02.entity;// Task.java import lombok.Data;Data public class Task {private String id;private String description; }第四步&#xff1a;创建Reposito…

FreeRTOS 学习相关笔记 附C语言内容补充

学习视频为【正点原子】手把手教你学FreeRTOS实时系统 文章目录 RTOS 入门裸机RTOSFreeRTOS任务调度方式任务状态 FreeRTOS 移植系统配置文件 API函数任务创建和删除动态方式创建任务静态方式创建任务删除任务 任务挂起和恢复函数调度器挂起与恢复临界区任务调度器的挂起和恢复…

鸿蒙开发已解决-Failed to connect to gitee.com port 443: Time out 连接超时提示

文章目录 项目场景:问题描述原因分析:解决方案:解决方案1解决方案2:解决方案3:此Bug解决方案总结解决方案总结**心得体会:解决连接超时问题的三种方案**项目场景: 导入Sample时遇到导入失败的情况,并提示“Failed to connect to gitee.com port 443: Time out”连接超…