node-wechat-oauth 是一个 Node.js 的库,它可以快速实现微信 OAuth2.0 的认证和授权功能。在前端开发中,微信 OAuth2.0 是非常常用的功能,可以用于网站在用户使用微信登录时进行认证和授权操作。本篇文章将详细讲解如何使用 npm 包 node-wechat-oauth 实现微信 OAuth2.0 的认证和授权。
安装
我们可以通过 npm 安装 node-wechat-oauth:
npm install node-wechat-oauth --save
使用
在使用 node-wechat-oauth 前,我们需要先在微信公众平台上创建一个网页应用并获取凭证(AppID 和 AppSecret)。在创建成功后,我们可以通过以下代码创建一个 OAuth 实例:
const OAuth = require('node-wechat-oauth'); const client = new OAuth('APP_ID', 'APP_SECRET');
我们需要将 APP_ID 和 APP_SECRET 替换为我们自己的凭证。
获取授权 URL
通过如下代码可以获取授权 URL:
const url = client.getAuthorizeURL(REDIRECT_URI, STATE, SCOPE);
其中:
- REDIRECT_URI:授权后重定向的回调链接地址,需要是 URL 编码后的字符串。
- STATE:用于保持请求和回调的状态,授权请求后原样带回给第三方。
- SCOPE:授权作用域,snsapi_base (不弹出授权页面,直接跳转),snsapi_userinfo(弹出授权页面,可通过 openid 拿到昵称、性别、所在地)。
例如:
const url = client.getAuthorizeURL('http://www.example.com/auth', 'state', 'snsapi_userinfo');
获取 Access Token
通过授权 URL 获取 code 后,我们可以通过以下代码获取 access_token 和 openid:
const token = await client.getAccessToken(code);
其中,code 为获取到的 code。
获取用户信息
我们可以通过 access_token 和 openid 获取用户信息:
const user = await client.getUser(token.openid, token.access_token);
其中,token.openid 是用户的 openid,token.access_token 是通过 getAccessToken 获取到的 access_token。
示例代码
下面是一个完整的示例代码:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ----- - ----------------------------- ----- --- - ---------- -- ----- -- ----- ----- - ---------- -- ----- ----- --------- - -------------- ----- ------ - --- ------------ ----------- ---------------- ----- ---- -- - ----- --- - --------------------------------------------------------- -------- ------------------- ------------------ --- -------------------- ----- ----- ---- -- - ----- - ----- ----- - - ---------- ----- ----- - ----- ---------------------------- ----- ---- - ----- ---------------------------- -------------------- --------------- --- ---------------- -- -- - ------------------- -- ------- -- ------------------------ ---
在上面的代码中,当用户访问 /auth 路由时,会跳转到微信授权页面进行授权,授权后会跳转到 /callback 路由,在 /callback 路由中我们可以通过 getUser 方法获取到用户信息。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005600d81e8991b448dde38