用 Nodejs 实现了一下 JustAuth
用 Nodejs 实现了一下 JustAuth
oauth2 all in one
本项目参考了 Java 项目 JustAuth 的设计,将所有的第三方登录都整合到一个项目中,方便使用。 因为 JustAuth 项目是 Java 项目,Node 项目中没有类似的项目,所以本项目就诞生了。 原项目地址:JustAuth
设计上基本上保持一直,只是将 Java 项目中的代码翻译成了 Node 项目中的代码。做了一些小的改动,比如将 Java 项目中的枚举类型改成了字符串类型,因为 Node 项目中没有枚举类型。
目前支持的第三方登录有:
- <input disabled="" type="checkbox"> Google
- <input disabled="" type="checkbox"> Discord
- <input disabled="" type="checkbox"> Twitter
因为我公司只用到了这两个,其他的第三方登录后续会陆续实现。
项目地址:oauth2-aio
使用方法
安装
npm install oauth2-aio
使用
import {AuthGoogleRequest} from "../src";
const googleAuth = new AuthGoogleRequest({
clientId: “clientId”,
clientSecret: “clientSecret”,
redirectUri: “redirectUri”,
scopes: []
})
const redirectUrl = googleAuth.authorize(‘32412341’)
console.log(redirectUrl)
// exec(open ${redirectUrl}
)
const r = await googleAuth.login({
code: ‘code’
})
console.log®
Passport.js 就是这类项目
为啥不用 passport.js ?
哈哈哈 我都不知道
好东西啊 ,,必须赞一下。
造轮子前还真是有必要查下是否有已存在的轮子
当然,用 Node.js 实现 JustAuth 的功能涉及多个方面,因为 JustAuth 本身是一个 Java 库,用于简化第三方 OAuth 认证流程。不过,我们可以用 Node.js 和一些第三方库来实现类似的功能。
下面是一个简单的例子,展示如何使用 Node.js 和 axios
库来请求 GitHub 的 OAuth 认证。为了简化,我们假设你已经有一个 GitHub 应用并获取了 client_id
和 client_secret
。
首先,安装 axios
:
npm install axios
然后,创建一个简单的 Node.js 脚本:
const axios = require('axios');
const querystring = require('querystring');
const clientId = 'YOUR_CLIENT_ID';
const clientSecret = 'YOUR_CLIENT_SECRET';
const redirectUri = 'YOUR_REDIRECT_URI';
const code = 'CODE_RECEIVED_FROM_GITHUB_CALLBACK'; // 从 GitHub 回调 URL 获取的授权码
const tokenUrl = `https://github.com/login/oauth/access_token?${querystring.stringify({
client_id: clientId,
client_secret: clientSecret,
redirect_uri: redirectUri,
code: code,
grant_type: 'authorization_code'
})}`;
axios.get(tokenUrl)
.then(response => {
console.log('Access Token:', response.data.access_token);
})
.catch(error => {
console.error('Error fetching access token:', error);
});
这个脚本将请求 GitHub 的 OAuth 令牌。你需要将 YOUR_CLIENT_ID
、YOUR_CLIENT_SECRET
、YOUR_REDIRECT_URI
和 CODE_RECEIVED_FROM_GITHUB_CALLBACK
替换为你的实际值。
请注意,这只是一个简单的例子,实际生产环境中需要考虑更多的安全性、错误处理和用户数据管理等。