wallet-svr/src/controllers/apple.controller.ts
2022-12-02 12:59:43 +08:00

39 lines
1.2 KiB
TypeScript

import BaseController from 'common/base.controller'
import { role, router } from 'decorators/router'
import verifyAppleToken from 'verify-apple-id-token'
import { Account, PlatEnum } from 'modules/Account'
const CLIENT_ID_DEBUG = 'com.jc.tebg'
const CLIENT_ID_RELEASE = 'com.cege.games.release'
class AppleController extends BaseController {
@role('anon')
@router('post /apple/login-notify')
async appleLoginCb(req, res) {
const { code, token } = req.params
return {}
}
@role('anon')
@router('post /wallet/login/apple')
async checkGoogleJwt(req, res) {
const { token } = req.params
const payload = await verifyAppleToken({
idToken: token,
clientId: [CLIENT_ID_DEBUG, CLIENT_ID_RELEASE],
})
const openId = payload.sub
let data: any = {
email: payload.email,
emailVerified: payload.email_verified,
}
if (payload.locale) data.locale = payload.locale
if (payload.name) data.nickname = payload.name
if (payload.picture) data.avatar = payload.picture
let user = await Account.insertOrUpdate({ plat: PlatEnum.APPLE, openId }, data)
const ztoken = await res.jwtSign({ id: user.id })
return { token: ztoken }
}
}