|
@@ -0,0 +1,83 @@
|
|
|
+const md5 = require("md5");
|
|
|
+const API = require("../../lib/API");
|
|
|
+const { BaseStdResponse } = require("../../BaseStdResponse");
|
|
|
+const db = require("../../plugin/DataBase/db");
|
|
|
+const {
|
|
|
+ getUserInfo,
|
|
|
+ getUserID
|
|
|
+} = require("../../plugin/WXWork/GetInfo");
|
|
|
+
|
|
|
+class WXWorkLogin extends API {
|
|
|
+ constructor() {
|
|
|
+ super();
|
|
|
+ this.setMethod("POST");
|
|
|
+ this.setPath("/User/WXWorkLogin");
|
|
|
+ }
|
|
|
+
|
|
|
+ createSession(uuid, salt) {
|
|
|
+ return md5(`${uuid}${salt}${new Date().getTime()}`);
|
|
|
+ }
|
|
|
+
|
|
|
+ async onRequest(req, res) {
|
|
|
+ this.setAllowCORS(res);
|
|
|
+
|
|
|
+ const { code } = req.body;
|
|
|
+ if (!code) {
|
|
|
+ res.json({ ...BaseStdResponse.MISSING_PARAMETER, endpoint: 7841686 });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ const idRes = await getUserID(code);
|
|
|
+ if (!idRes || !idRes.success) {
|
|
|
+ return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: `登录失败!${idRes.msg}` });
|
|
|
+ }
|
|
|
+
|
|
|
+ const wxid = idRes.userid;
|
|
|
+ const session = this.createSession(wxid, Math.random().toFixed(6).slice(-6));
|
|
|
+
|
|
|
+ let sql = 'SELECT uuid, username, avatar FROM users WHERE wxid = ?';
|
|
|
+ let [rows] = await db.query(sql, [wxid]);
|
|
|
+
|
|
|
+ let result, uuid, username, avatar;
|
|
|
+ if (rows.length > 0) {
|
|
|
+ // 用户存在,更新 session
|
|
|
+ ({ uuid, username, avatar } = rows[0]);
|
|
|
+
|
|
|
+ const updateQuery = 'UPDATE users SET session = ? WHERE wxid = ?';
|
|
|
+ result = await db.query(updateQuery, [session, wxid]);
|
|
|
+ } else {
|
|
|
+ // 用户不存在,注册用户
|
|
|
+ const infoRes = await getUserInfo(wxid);
|
|
|
+ if (!infoRes || !infoRes.success) {
|
|
|
+ return res.json({ ...BaseStdResponse.ERR, endpoint: 7894198, msg: `登录失败!${infoRes.msg}` });
|
|
|
+ }
|
|
|
+
|
|
|
+ ({ name: username, avatar } = infoRes);
|
|
|
+ uuid = md5(Date.now() + wxid + code);
|
|
|
+
|
|
|
+ const insertQuery = 'INSERT INTO users (uuid, username, wxid, avatar, session) VALUES (?, ?, ?, ?, ?)';
|
|
|
+ result = await db.query(insertQuery, [uuid, username, wxid, avatar, session]);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (result && result.affectedRows > 0) {
|
|
|
+ return res.json({
|
|
|
+ ...BaseStdResponse.OK,
|
|
|
+ data: {
|
|
|
+ uuid,
|
|
|
+ username,
|
|
|
+ wxid,
|
|
|
+ avatar,
|
|
|
+ session
|
|
|
+ }
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: '登录失败!' });
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ return res.json({ ...BaseStdResponse.ERR, endpoint: 7894377, msg: '登录失败!' });
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+module.exports.WXWorkLogin = WXWorkLogin;
|