Explorar o código

单点登录 - 待验证

xy hai 2 días
pai
achega
94a9a16840

+ 2 - 2
yudao-ui-admin-vue3/src/api/login/index.ts

@@ -25,8 +25,8 @@ export const sendSmsCodeApi = (data: UserLoginVO) => {
   return request.post({ url: '/system/auth/send-sms-code', data })
   return request.post({ url: '/system/auth/send-sms-code', data })
 }
 }
 // 登录CAS
 // 登录CAS
-export const loginCasMineInfoFn = () => {
-  return request.get({ url: `/system/cas/mineInfo` })
+export const loginCasMineInfoFn = (params) => {
+  return request.get({ url: `/system/cas/mineInfo`, params })
 }
 }
 // 验证码登录
 // 验证码登录
 export const smsLoginApi = (data: UserLoginVO) => {
 export const smsLoginApi = (data: UserLoginVO) => {

+ 1 - 0
yudao-ui-admin-vue3/src/api/login/types.ts

@@ -12,6 +12,7 @@ export type TokenType = {
   accessToken: string // 访问令牌
   accessToken: string // 访问令牌
   refreshToken: string // 刷新令牌
   refreshToken: string // 刷新令牌
   userId: number // 用户编号
   userId: number // 用户编号
+  loginType?: string // 登录方式 cas || local
   userType: number //用户类型
   userType: number //用户类型
   clientId: string //客户端编号
   clientId: string //客户端编号
   expiresTime: number //过期时间
   expiresTime: number //过期时间

+ 5 - 5
yudao-ui-admin-vue3/src/permission.ts

@@ -47,12 +47,12 @@ const parseURL = (
   return { basePath, paramsObject }
   return { basePath, paramsObject }
 }
 }
 // 单点登录token验证函数
 // 单点登录token验证函数
-const validateAndLogin = async () => {
+const validateAndLogin = async (code) => {
   try {
   try {
     const userStore = useUserStoreWithOut()
     const userStore = useUserStoreWithOut()
     // 调用单点登录接口,传入外部token
     // 调用单点登录接口,传入外部token
     // 这里根据你的实际接口调整
     // 这里根据你的实际接口调整
-    const response = await userStore.ssoLogin()
+    const response = await userStore.ssoLogin(code)
     // const response = {
     // const response = {
     //   accessToken: "41f636cc7ff247129e4d4f205bc3a096",
     //   accessToken: "41f636cc7ff247129e4d4f205bc3a096",
     //   expiresTime: 1767094239442,
     //   expiresTime: 1767094239442,
@@ -102,14 +102,14 @@ router.beforeEach(async (to, from, next) => {
   loadStart()
   loadStart()
   
   
   const loginType = to.query.loginType as string
   const loginType = to.query.loginType as string
-
+  const code = to.query.code as string
   // 处理单点登录
   // 处理单点登录
-  if (loginType == 'cas') {
+  if (loginType == 'cas' && code) {
     console.log('检测到SSO登录参数:',  loginType )
     console.log('检测到SSO登录参数:',  loginType )
     
     
     try {
     try {
       // 验证token并登录
       // 验证token并登录
-      const loginSuccess = await validateAndLogin()
+      const loginSuccess = await validateAndLogin(code)
       console.log('SSO登录结果:', loginSuccess)
       console.log('SSO登录结果:', loginSuccess)
       if (loginSuccess) {
       if (loginSuccess) {
         // 登录成功,清除URL中的token参数
         // 登录成功,清除URL中的token参数

+ 5 - 3
yudao-ui-admin-vue3/src/store/modules/user.ts

@@ -5,6 +5,7 @@ import { CACHE_KEY, useCache, deleteUserCache } from '@/hooks/web/useCache'
 import { getInfo, loginOut } from '@/api/login'
 import { getInfo, loginOut } from '@/api/login'
 import * as LoginApi from '@/api/login'
 import * as LoginApi from '@/api/login'
 const { wsCache } = useCache()
 const { wsCache } = useCache()
+import * as authUtil from '@/utils/auth'
 
 
 interface UserVO {
 interface UserVO {
   id: string
   id: string
@@ -91,10 +92,11 @@ export const useUserStore = defineStore('admin-user', {
       userInfo.user.nickname = nickname
       userInfo.user.nickname = nickname
       wsCache.set(CACHE_KEY.USER, userInfo)
       wsCache.set(CACHE_KEY.USER, userInfo)
     },
     },
-    async ssoLogin() {
+    async ssoLogin(code) {
       try {
       try {
-        const res = await LoginApi.loginCasMineInfoFn()
-        if (res) {
+        const res = await LoginApi.loginCasMineInfoFn({code})
+        if (res && res.accessToken) {
+          authUtil.setToken(res)
           return res
           return res
         }
         }
         return null
         return null

+ 2 - 0
yudao-ui-admin-vue3/src/utils/auth.ts

@@ -7,6 +7,7 @@ const { wsCache } = useCache()
 const AccessTokenKey = 'ACCESS_TOKEN'
 const AccessTokenKey = 'ACCESS_TOKEN'
 const RefreshTokenKey = 'REFRESH_TOKEN'
 const RefreshTokenKey = 'REFRESH_TOKEN'
 
 
+const LoginTypeKey = 'LOGIN_TYPE'
 // 获取token
 // 获取token
 export const getAccessToken = () => {
 export const getAccessToken = () => {
   // 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错
   // 此处与TokenKey相同,此写法解决初始化时Cookies中不存在TokenKey报错
@@ -23,6 +24,7 @@ export const getRefreshToken = () => {
 export const setToken = (token: TokenType) => {
 export const setToken = (token: TokenType) => {
   wsCache.set(RefreshTokenKey, token.refreshToken)
   wsCache.set(RefreshTokenKey, token.refreshToken)
   wsCache.set(AccessTokenKey, token.accessToken)
   wsCache.set(AccessTokenKey, token.accessToken)
+  wsCache.set(LoginTypeKey, token.loginType)
 }
 }
 
 
 // 删除token
 // 删除token