Nodejs 网页接入第三方授权的问题

发布于 1周前 作者 ionicwang 来自 nodejs/Nestjs

Nodejs 网页接入第三方授权的问题

最近在做一个记账的网站,功能已经实现完成了. 目前用的是 google 两步验证,但是用手机访问网站,再切换 app 输入验证码,这操作太麻烦了. 所以想接入第三方的帐号系统,例如:微信 /QQ/支付宝,本身网站需要兼容 PC 和手机访问,所以需要更方便的登录操作. 网上也搜了下实现各种网站的第三方授权功能效果.例如:https://www.newegg.cn/ 在手机上登录新蛋的时候,点击 QQ 登录,会自动拉起 QQ 的 App 授权,授权成功,自动返回浏览器,成功登录.

  1. 不知道微信 /支付宝有没有同样的操作模式?而不是基于扫码的授权逻辑.毕竟用户用手机访问网站的时候,已经不能再扫码了.
  2. 个人号微信小程序,还不能用 webview,感觉也是挺坑的.有啥好的解决办法,套个壳发布到微信小程序里么?
  3. 代码写的挺 low 的,现在想小范围做测试,但是希望通过我授权允许的方式才能注册,所以想到了邀请码机制,但是手动生成一堆邀请码,再发放,又变得罗嗦了,有什么更好的逻辑么?

1 回复

在Node.js应用中接入第三方授权通常涉及OAuth 2.0协议。以下是一个基本的步骤指南,以及如何用代码实现这一过程。

步骤指南

  1. 注册应用:在第三方平台(如GitHub, Google, Facebook等)注册你的应用,获取client_idclient_secret

  2. 用户重定向:构建一个URL,将用户重定向到第三方平台的授权页面。这个URL通常包含你的client_id、重定向URI和请求的权限范围。

  3. 处理回调:用户在第三方平台授权后,会被重定向回你的应用,并附带一个授权码(code)。使用这个授权码去请求访问令牌(access_token)。

  4. 获取用户信息:使用访问令牌从第三方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}`));

注意,实际应用中需处理错误、存储令牌、保护路由等。

回到顶部