Nodejs 网页接入第三方授权的问题
Nodejs 网页接入第三方授权的问题
最近在做一个记账的网站,功能已经实现完成了. 目前用的是 google 两步验证,但是用手机访问网站,再切换 app 输入验证码,这操作太麻烦了. 所以想接入第三方的帐号系统,例如:微信 /QQ/支付宝,本身网站需要兼容 PC 和手机访问,所以需要更方便的登录操作. 网上也搜了下实现各种网站的第三方授权功能效果.例如:https://www.newegg.cn/ 在手机上登录新蛋的时候,点击 QQ 登录,会自动拉起 QQ 的 App 授权,授权成功,自动返回浏览器,成功登录.
- 不知道微信 /支付宝有没有同样的操作模式?而不是基于扫码的授权逻辑.毕竟用户用手机访问网站的时候,已经不能再扫码了.
- 个人号微信小程序,还不能用 webview,感觉也是挺坑的.有啥好的解决办法,套个壳发布到微信小程序里么?
- 代码写的挺 low 的,现在想小范围做测试,但是希望通过我授权允许的方式才能注册,所以想到了邀请码机制,但是手动生成一堆邀请码,再发放,又变得罗嗦了,有什么更好的逻辑么?
1 回复
在Node.js应用中接入第三方授权通常涉及OAuth 2.0协议。以下是一个基本的步骤指南,以及如何用代码实现这一过程。
步骤指南
-
注册应用:在第三方平台(如GitHub, Google, Facebook等)注册你的应用,获取
client_id
和client_secret
。 -
用户重定向:构建一个URL,将用户重定向到第三方平台的授权页面。这个URL通常包含你的
client_id
、重定向URI和请求的权限范围。 -
处理回调:用户在第三方平台授权后,会被重定向回你的应用,并附带一个授权码(
code
)。使用这个授权码去请求访问令牌(access_token
)。 -
获取用户信息:使用访问令牌从第三方API获取用户信息。
代码示例
以下是一个使用axios
库和express
框架的简化示例:
const express = require('express');
const axios = require('axios');
const app = express();
const PORT = 3000;
app.get('/auth', (req, res) => {
const authUrl = `https://example.com/oauth/authorize?response_type=code&client_id=YOUR_CLIENT_ID&redirect_uri=YOUR_REDIRECT_URI`;
res.redirect(authUrl);
});
app.get('/callback', async (req, res) => {
const { code } = req.query;
const tokenResponse = await axios.post('https://example.com/oauth/token', {
code,
client_id: 'YOUR_CLIENT_ID',
client_secret: 'YOUR_CLIENT_SECRET',
redirect_uri: 'YOUR_REDIRECT_URI',
grant_type: 'authorization_code'
});
const accessToken = tokenResponse.data.access_token;
// 使用accessToken获取用户信息
});
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
注意,实际应用中需处理错误、存储令牌、保护路由等。