39 lines
1.2 KiB
TypeScript
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 }
|
|
}
|
|
}
|