微信登陆登陆一次不用在登陆

用户要求在微信端登录一次后,以后不需要再登录.  我的系统是单独的一个网站. 使用MVC的记住密码功能, 如果用户重启,就还是要输入密码,所以需要有一个唯一不变的用来标示用户的ID。  OpenID就是这样,微信用户对于每个公众号它都是唯一的,不管关注还是不关注。

 

如何做到呢?

使用微信的网页授权(OAuth2.0),简单点理解这个东西就是跑到微信去请求个回调,微信跳转到你给的回调页面,然后在页面后面加个code,  你拿着code 去微信取你要的信息。

(1), 去公众号后台设置回调的域名

       在开发-- 接口权限 -- 网页账号-- 用户授权获取用户基础信息   点击 “修改”,输入域名。  如www.baidu.com

(2)  绑定开发者微信号: 在开发--开发者工具 -- web开发者工具--进入 绑定开发者微信

(3) 这个时候你就可以试着看到code.  比如

在微信web开发者工具中输入

https://open.weixin.qq.com/connect/oauth2/authorize?appid=*******&redirect_uri=www.baidu.com&response_type=code&scope=snsapi_base&state=1#wechat_redirect

页面就会跳转到  www.baidu.com?code=***.  就可以看到code了。

(4) 通过code 来获取openID

https://api.weixin.qq.com/sns/oauth2/access_token?appid=***&secret=***&code=***&grant_type=authorization_code

会返回json 数据包,里面有要得OpenID 。  具体可以参见:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

这里注意的是一个code只能使用一次,我开始不知道,反复去取,导致程序时而好时而不好。  Code 5分钟不用就过期。

我这里只是去了OpenID。如果要取用户的其它信息,就需要在取code的时候改scope=snsapi_userinfo。 开发者文档也有详细记录

### 如何在 NestJS 中实现微信登录集成 #### 后端配置:使用 `nest-wechat` 模块处理微信认证请求 为了简化开发过程,可以利用专门针对 NestJS 的模块 `nest-wechat` 来管理与微信公众平台之间的交互。此模块提供了便捷的方法用于发起OAuth2.0授权流程,并获取用户的开放ID(openid)[^2]。 安装依赖: ```bash npm install @ne/nestjs-wechat --save ``` 注册WeChatModule: ```typescript import { Module } from '@nestjs/common'; import { WeChatModule } from 'nest-wechat'; @Module({ imports: [ WeChatModule.forRootAsync({ useFactory: () => ({ appID: process.env.WECHAT_APP_ID, appSecret: process.env.WECHAT_SECRET_KEY, token: process.env.WECHAT_TOKEN, encodingAESKey: process.env.WECHAT_ENCODING_AES_KEY, }), }), ], }) export class AppModule {} ``` 创建控制器以响应来自前端的登录请求: ```typescript import { Controller, Get, Query } from '@nestjs/common'; import { WeChatService } from 'nest-wechat/dist/we-chat.service'; @Controller('auth') export class AuthController { constructor(private readonly weChatService: WeChatService) {} @Get('/wechat/callback') async handleCallback(@Query('code') code: string): Promise<any> { const result = await this.weChatService.oauth.getCodeToSession(code); // 处理返回的数据... console.log(result); return result; } } ``` 上述代码片段展示了如何设置回调路由 `/auth/wechat/callback?code=CODE` ,当用户同意授权后会被重定向到这里。通过传递过来的一次性票据(即`code`),可以从微信服务器获得访问令牌及OpenID等信息。 #### 前端部分:Uni-app 发起授权链接跳转 对于前端应用而言,在uni-app环境中可以通过如下方式引导用户进入微信授权页面: ```javascript // 在适当的地方触发该函数 function redirectToAuthPage() { let appId = "YOUR_WECHAT_APP_ID"; let redirectUri = encodeURIComponent("https://yourdomain.com/auth/wechat/callback"); window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`; } ``` 这段JavaScript负责构建正确的URL并将浏览器导航到指定位置,从而启动整个OAuth2.0协议下的身份验证流程[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值