| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- const API = require("../../../lib/API")
- const axios = require('axios')
- const { v4: uuidv4 } = require('uuid')
- const db = require("../../../plugin/DataBase/db")
- const config = require('../../../config.json')
- const { BaseStdResponse } = require("../../../BaseStdResponse");
- class Login extends API {
- constructor() {
- super()
- this.setPath('/UniLogin/Login')
- this.setMethod('POST')
- }
- async onRequest(req, res) {
- let { type, code } = req.body
- if ([code].some(value => value === '' || value === null || value === undefined))
- return res.json({
- ...BaseStdResponse.MISSING_PARAMETER
- })
- const uniConfig = config.unilogin
- let url = `${uniConfig.url}/connect.php?act=callback&appid=${uniConfig.appid}&appkey=${uniConfig.appkey}&type=${type || 'qq'}&code=${code}`
- try {
- const r = await axios.get(url, {
- proxy: false
- })
- if (!r || r.data?.code !== 0) {
- this.logger.error(`获取用户信息失败!${r.data?.msg || 'api接口错误'}`)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '获取用户信息失败!'
- })
- }
- let { social_uid, nickname, faceimg, ip } = r.data
- const session = uuidv4()
- const time = new Date().getTime()
- let selectSql = 'SELECT uuid, permission FROM users WHERE social_uid = ? AND social_type = ?'
- let selectRows = await db.query(selectSql, [social_uid, type || 'qq'])
- let uuid, username, permission
- // 用户不存在 执行注册操作
- if (selectRows.length == 0) {
- uuid = uuidv4()
- username = `用户${uuid.slice(0, 8)}`
- let regSql = 'INSERT INTO users (uuid, username, session, registTime, social_uid, social_type, nickname, avatar, email) VALUES (?,?,?,?,?,?,?,?,?) '
- let regRows = await db.query(regSql, [uuid, username, session, time, social_uid, type || 'qq', nickname, faceimg, '未设置'])
- if (!regRows || regRows.affectedRows !== 1) {
- this.logger.error(`聚合登录用户注册失败!数据库错误`)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '用户注册失败!'
- })
- }
- }
- else {
- let updateSql = 'UPDATE users SET session = ?, lastTime = ?, avatar = ?, nickname = ? WHERE social_uid = ? AND login_type = ?'
- let updateRows = await db.query(updateSql, [session, time, faceimg, nickname, social_uid, type || 'qq'])
- if (!updateRows || updateRows.affectedRows !== 1) {
- this.logger.error(`聚合登录用户登录失败!数据库错误`)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '用户登录失败!请稍后再试'
- })
- }
- username = selectRows[0].username
- permission = selectRows[0].permission
- }
- res.json({
- ...BaseStdResponse.OK,
- data: {
- uuid,
- username,
- session,
- nickname,
- type: type || 'qq',
- roles: permission || [],
- avatar: faceimg,
- }
- })
- // 增加登录记录
- } catch (error) {
- this.logger.error(`获取用户信息失败!${error.message || 'api接口错误'}`)
- return res.json({
- ...BaseStdResponse.ERR,
- msg: '获取用户信息失败!'
- })
- }
- }
- }
- module.exports.Login = Login;
|