1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- const { AuthenticationClient } = require('authing-js-sdk')
- import { pgClient } from '../../db/pg-instance'
- export function defineAuthingLogin(){
- Parse.Cloud.define("authingLogin", async (request) => {
- let token = request.params.token;
- if(token) {
- let result = await syncSessionWithIdToken(token)
- return result
- }
- return null
- },{
- fields : {
- token:{
- required:true
- }
- }
- });
- }
-
- /**
- * 同步用户登录信息
- * @desc
- * https://docs.authing.cn/v2/reference/sdk-for-node/authentication/AuthenticationClient.html#获取当前登录的用户信息
- * @param {*} token
- * @returns
- */
- async function syncSessionWithIdToken(token){
- // 通过用户的 id_token 初始化之后获取用户信息
- let authenticationClient = new AuthenticationClient({
- appId: '6682ab96b7bd5db59d6785a0',
- appHost: 'https://textbook.u2-dev.hep.com.cn', // 应用的认证地址
- token: token
- })
- let user = await authenticationClient.getCurrentUser()
- // console.log(user)
- // 生成Parse库所需_Session记录 objectId唯一
- let sessionObjectId = generateObjectId(user?.id+user?.token)
- let username = user?.phone || user?.username || user?.email
- let syncSessionSQL = `
- INSERT INTO "_User" ("objectId", "username","mobile", "createdAt", "updatedAt")
- VALUES
- ($2,$7,$8,$5,$6)
- ON conflict("objectId") DO UPDATE
- SET
- "username" = excluded."username",
- "updatedAt"=excluded."updatedAt";
- ALTER TABLE "_Session"
- ADD CONSTRAINT unique_objectId UNIQUE ("objectId");
- INSERT INTO "_Session" ("objectId", "user", "sessionToken","expiresAt", "createdAt")
- VALUES
- ($1, $2,$3,$4,$5)
- ON conflict("objectId") DO UPDATE
- SET
- "user" = excluded."user",
- "sessionToken" = excluded."sessionToken",
- "expiresAt"=excluded."expiresAt";
- `
- let params = [sessionObjectId,user?.id,user?.token,user?.tokenExpiredAt,new Date(),new Date(),username,user?.phone]
- if(user?.id&&user?.token){
- try {
- // 查询:数据库版本信息
- const data = await pgClient().any(syncSessionSQL,params);
- // console.log(data)
- return {
- sid:sessionObjectId,
- uid:user?.id,
- sessionToken:user?.token
- };
- } catch (error) {
- console.error('Error executing query:', error);
- return error;
- }
- }
- }
- module.exports.syncSessionWithIdToken = syncSessionWithIdToken
- const crypto = require('crypto');
- function generateObjectId(inputString) {
- const hash = crypto.createHash('sha256').update(inputString).digest('hex');
- const objectId = hash;
- return objectId;
- }
|