小程序前端接入微信登录与环境配置
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
import { View, Text, Button } from '@tarojs/components'
|
||||
import { useEffect } from 'react'
|
||||
import Taro from '@tarojs/taro'
|
||||
import { BASE_URL, request } from '@/services/api'
|
||||
import { wechatLogin } from '@/services/auth'
|
||||
import './index.scss'
|
||||
|
||||
export default function Login() {
|
||||
@@ -25,6 +25,9 @@ export default function Login() {
|
||||
const loginRes = await Taro.login()
|
||||
const code = loginRes.code
|
||||
console.log('[Login] Got code:', code ? 'yes' : 'no')
|
||||
if (!code) {
|
||||
throw new Error('未获取到微信登录凭证')
|
||||
}
|
||||
|
||||
// 2. 获取用户头像信息 (可选)
|
||||
let userInfo = null
|
||||
@@ -41,48 +44,26 @@ export default function Login() {
|
||||
|
||||
// 3. 调用后端登录接口 (微信登录)
|
||||
console.log('[Login] Step 3: Calling backend /auth/login...')
|
||||
const res = await request<{ access_token: string; expires_in: number; user_id: number }>('/auth/login', {
|
||||
method: 'POST',
|
||||
data: {
|
||||
code: code, // 微信 code
|
||||
nickname: userInfo?.nickName,
|
||||
avatar_url: userInfo?.avatarUrl
|
||||
}
|
||||
const res = await wechatLogin({
|
||||
code,
|
||||
nickname: userInfo?.nickName,
|
||||
avatar_url: userInfo?.avatarUrl
|
||||
})
|
||||
console.log('[Login] Backend login success, user_id:', res.user_id)
|
||||
|
||||
// 4. 保存 token 和用户信息
|
||||
console.log('[Login] Step 4: Saving token and user info...')
|
||||
Taro.setStorageSync('token', res.access_token)
|
||||
Taro.setStorageSync('user_id', res.user_id)
|
||||
Taro.setStorageSync('expires_in', res.expires_in)
|
||||
|
||||
// 保存用户信息用于显示
|
||||
// 4. 保存用户信息用于显示
|
||||
console.log('[Login] Step 4: Saving user info...')
|
||||
if (userInfo) {
|
||||
Taro.setStorageSync('userInfo', {
|
||||
nickname: userInfo.nickName,
|
||||
avatar_url: userInfo.avatarUrl
|
||||
})
|
||||
}
|
||||
|
||||
// 5. 如果获取到了用户信息,发送到后端更新
|
||||
if (userInfo) {
|
||||
console.log('[Login] Step 5: Updating user profile...')
|
||||
try {
|
||||
await request(`/parents/${res.user_id}`, {
|
||||
method: 'PATCH',
|
||||
data: {
|
||||
nickname: userInfo.nickName,
|
||||
avatar_url: userInfo.avatarUrl
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log('[Login] Update user profile failed:', e)
|
||||
}
|
||||
} else {
|
||||
Taro.removeStorageSync('userInfo')
|
||||
}
|
||||
|
||||
Taro.hideLoading()
|
||||
console.log('[Login] Step 6: Login complete, showing success toast')
|
||||
console.log('[Login] Step 5: Login complete, showing success toast')
|
||||
Taro.showToast({ title: '登录成功', icon: 'success' })
|
||||
|
||||
// 6. 跳转到首页
|
||||
@@ -95,7 +76,7 @@ export default function Login() {
|
||||
Taro.hideLoading()
|
||||
console.error('[Login] Login failed:', err)
|
||||
|
||||
// 如果是 401 错误,尝试通过创建新用户登录
|
||||
// 401 通常表示微信 code 失效或已被使用,提示用户重试登录
|
||||
if (err.status === 401) {
|
||||
Taro.showToast({
|
||||
title: '登录失败,请重试',
|
||||
|
||||
Reference in New Issue
Block a user