PageSourceSearch

https://www.ftu.org.hk/_nuxt/sIml7-f7.js

js ftu.org.hk collected 2026-09-25 04:51:39 UTC 4,945 bytes, 1 lines download raw bytes

1import{d as D,a as I,g as N,i as u,c as R,k as q,a4 as G,J as j,c1 as z,c2 as F,a5 as H,at as J,aq as A,c3 as E,l as m,o as i,m as a,b as K,y as g,e as Q,t as L,A as W,_ as Y}from"./D1FcBL9p.js";import{_ as X}from"./IN2EHIwK.js";import{_ as Z}from"./JvIp-1Jk.js";import ee from"./BHBzpdwH.js";/* empty css        *//* empty css        *//* empty css        */import"./DfaXuOzC.js";import"./BySzvsyc.js";const se={class:"min-h-screen flex items-center justify-center bg-gray-50"},oe={class:"max-w-md w-full space-y-8 p-10 bg-white rounded-xl shadow-lg text-center"},te={key:0},ae={key:0,class:"mt-4 text-gray-600"},re={key:1,class:"bg-red-50 border border-red-200 rounded-lg p-6"},le={class:"text-red-600 mb-4"},ue={class:"success-modal-content"},ce={class:"success-modal-subtitle"},ne=D({__name:"CallbackView",setup(ie){const{isMobile:M}=I(),_=G(),c=J(),{wsCache:e}=j(),f=N(),p=u(!1),h=u({}),b=u(6),l=u(!0),y=u(!1),C=u(""),n=u(!1),r=u(""),S=u(!1),$=R(()=>({iamSmart:"已經為您開設帳戶,以後請透過智方便登入",google:"已經為您開設帳戶,以後請透過 Google 登入",facebook:"已經為您開設帳戶,以後請透過 Facebook 登入"})[r.value]||"已經為您開設帳戶");q(()=>{P()});const O=()=>{p.value=!1,l.value=!0,c.replace("/login")},P=async()=>{if(!S.value){S.value=!0;try{r.value=_.params.provider;const s=e.get("sso_source")||"";console.log("SSO 来源:",s),console.log("handleOAuthCallback------",r.value,_.params.provider);const{code:o,state:w,error:x}=z(_),k=F(w||"");if(x)throw new Error(`${r.value} 登录错误: ${x}`);if(r.value==="iamSmart"){if(!o)throw new Error("缺少授權參數");const t=H(),d=s==="signin"?"/Signin":"/login";c.replace(t(`${d}?code=${encodeURIComponent(o)}&iamsmart=1`));return}if(!o||!k)throw new Error("缺少必要的授权参数");let v=null;{if(!k)throw new Error("缺少必要的授权参数");const t=e.get(`${r.value}_oauth_state`);if(e.delete(`${r.value}_oauth_state`),t!==k)throw new Error("安全验证失败: 状态令牌不匹配");if(v=e.get("pkce_code_verifier"),e.delete("pkce_code_verifier"),!v)throw new Error("缺少 PKCE 验证器")}if(r.value==="google"){const t=await A.post({url:"/app-api/user/member/auth/googleAuth",data:{code:o,codeVerifier:v,redirectUri:`${window.location.origin}/callback/${r.value}`,...E}});if(!t.canLogin||s==="signin"&&t.socialUser){l.value=!1,p.value=!0,h.value=t.socialUser,b.value=30;return}if(console.log("response",t),await f.completeOAuthLogin(t),l.value=!1,e.delete("sso_source"),s==="signin")n.value=!0;else{const d=e.get("return_url")||"/";c.push(d)}}else if(r.value=="facebook"){const t=await A.post({url:"/app-api/user/member/auth/facebookAuth",data:{code:o,codeVerifier:v,redirectUri:`${window.location.origin}/callback/${r.value}`,...E}});if(!t.canLogin||s==="signin"&&t.socialUser){l.value=!1,p.value=!0,h.value=t.socialUser,b.value=40;return}if(console.log("response",t),await f.completeOAuthLogin(t),l.value=!1,e.delete("sso_source"),s==="signin")n.value=!0;else{const d=e.get("return_url")||"/";c.push(d)}}}catch(s){console.error("登录处理失败:",s),y.value=!0,C.value=s.message||"登录过程中发生错误",l.value=!1}}},B=async s=>{if(await f.completeOAuthLogin(s),(e.get("sso_source")||"")==="signin")e.delete("sso_source"),n.value=!0;else{e.delete("sso_source");const w=e.get("return_url")||"/";c.push(w)}},T=()=>{e.delete("google_oauth_state"),e.delete("facebook_oauth_state"),e.delete("iamSmart_oauth_state"),e.delete("pkce_code_verifier"),c.push("/login")},U=()=>{n.value=!1,l.value=!1,e.delete("sso_source");const s=e.get("return_url")||"/";c.push(s)},V=()=>{n.value=!1,l.value=!1,e.delete("sso_source");const s=e.get("return_url")||"/";c.push(s)};return(s,o)=>(i(),m("div",se,[a("div",oe,[l.value?(i(),m("div",te,[o[0]||(o[0]=a("div",{class:"w-16 h-16 border-t-4 border-blue-500 border-solid rounded-full animate-spin mx-auto"},null,-1)),Q(M)?g("",!0):(i(),m("p",ae,"正在处理登录,请稍候..."))])):g("",!0),y.value?(i(),m("div",re,[o[1]||(o[1]=a("div",{class:"text-red-700 font-medium mb-2"},"登录失败",-1)),a("p",le,L(C.value),1),a("button",{onClick:T,class:"px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 focus:outline-none"}
1," 重新登录 ")])):g("",!0)]),p.value?(i(),K(ee,{key:0,onClose:O,"login-method":b.value,"social-user":h.value,onGoLogin:B},null,8,["login-method","social-user"])):g("",!0),n.value?(i(),m("div",{key:1,class:"success-modal-overlay",onClick:W(U,["self"])},[a("div",ue,[a("img",{src:X,class:"success-modal-close",alt:"close",onClick:U}),o[2]||(o[2]=a("div",{class:"success-modal-image"},[a("img",{src:Z,alt:"success"})],-1)),o[3]||(o[3]=a("h2",{class:"success-modal-title"},"已為您開設帳戶",-1)),a("p",ce,L($.value),1),a("div",{class:"success-modal-buttons"},[a("button",{class:"success-modal-primary-btn",onClick:V}," 繼續使用「工聯會」 ")])])])):g("",!0)]))}}),we=Y(ne,[["__scopeId","data-v-323c098f"]]);export{we as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.