Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
new-api
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
11cc44b4
authored
Nov 12, 2024
by
licoy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
封装OAuth2授权回调页面
parent
ddbe8c71
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
50 additions
and
112 deletions
+50
-112
web/pnpm-lock.yaml
+0
-0
web/src/App.js
+3
-4
web/src/components/LinuxDoOAuth.js
+0
-61
web/src/components/OAuth2Callback.js
+47
-47
No files found.
web/pnpm-lock.yaml
View file @
11cc44b4
This source diff could not be displayed because it is too large. You can
view the blob
instead.
web/src/App.js
View file @
11cc44b4
...
...
@@ -10,7 +10,6 @@ import Setting from './pages/Setting';
import
EditUser
from
'./pages/User/EditUser'
;
import
{
getLogo
,
getSystemName
}
from
'./helpers'
;
import
PasswordResetForm
from
'./components/PasswordResetForm'
;
import
GitHubOAuth
from
'./components/GitHubOAuth'
;
import
PasswordResetConfirm
from
'./components/PasswordResetConfirm'
;
import
{
UserContext
}
from
'./context/User'
;
import
Channel
from
'./pages/Channel'
;
...
...
@@ -26,7 +25,7 @@ import Midjourney from './pages/Midjourney';
import
Pricing
from
'./pages/Pricing/index.js'
;
import
Task
from
"./pages/Task/index.js"
;
import
Playground
from
'./components/Playground.js'
;
import
LinuxDoOAuth
from
'./components/LinuxDoOAuth.js'
;
import
OAuth2Callback
from
"./components/OAuth2Callback.js"
;
const
Home
=
lazy
(()
=>
import
(
'./pages/Home'
));
const
Detail
=
lazy
(()
=>
import
(
'./pages/Detail'
));
...
...
@@ -178,7 +177,7 @@ function App() {
path
=
'/oauth/github'
element
=
{
<
Suspense
fallback
=
{
<
Loading
><
/Loading>}
>
<
GitHubOAuth
/
>
<
OAuth2Callback
type
=
'github'
><
/OAuth2Callback
>
<
/Suspense
>
}
/
>
...
...
@@ -186,7 +185,7 @@ function App() {
path
=
'/oauth/linuxdo'
element
=
{
<
Suspense
fallback
=
{
<
Loading
><
/Loading>}
>
<
LinuxDoOAuth
/
>
<
OAuth2Callback
type
=
'linuxdo'
><
/OAuth2Callback
>
<
/Suspense
>
}
/
>
...
...
web/src/components/LinuxDoOAuth.js
deleted
100644 → 0
View file @
ddbe8c71
import
React
,
{
useContext
,
useEffect
,
useState
}
from
'react'
;
import
{
Dimmer
,
Loader
,
Segment
}
from
'semantic-ui-react'
;
import
{
useNavigate
,
useSearchParams
}
from
'react-router-dom'
;
import
{
API
,
showError
,
showSuccess
,
updateAPI
}
from
'../helpers'
;
import
{
UserContext
}
from
'../context/User'
;
import
{
setUserData
}
from
'../helpers/data.js'
;
const
LinuxDoOAuth
=
()
=>
{
const
[
searchParams
,
setSearchParams
]
=
useSearchParams
();
const
[
userState
,
userDispatch
]
=
useContext
(
UserContext
);
const
[
prompt
,
setPrompt
]
=
useState
(
'处理中...'
);
const
[
processing
,
setProcessing
]
=
useState
(
true
);
let
navigate
=
useNavigate
();
const
sendCode
=
async
(
code
,
state
,
count
)
=>
{
const
res
=
await
API
.
get
(
`/api/oauth/linuxdo?code=
${
code
}
&state=
${
state
}
`
);
const
{
success
,
message
,
data
}
=
res
.
data
;
if
(
success
)
{
if
(
message
===
'bind'
)
{
showSuccess
(
'绑定成功!'
);
navigate
(
'/setting'
);
}
else
{
userDispatch
({
type
:
'login'
,
payload
:
data
});
localStorage
.
setItem
(
'user'
,
JSON
.
stringify
(
data
));
setUserData
(
data
);
updateAPI
()
showSuccess
(
'登录成功!'
);
navigate
(
'/token'
);
}
}
else
{
showError
(
message
);
if
(
count
===
0
)
{
setPrompt
(
`操作失败,重定向至登录界面中...`
);
navigate
(
'/setting'
);
// in case this is failed to bind GitHub
return
;
}
count
++
;
setPrompt
(
`出现错误,第
${
count
}
次重试中...`
);
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
count
*
2000
));
await
sendCode
(
code
,
state
,
count
);
}
};
useEffect
(()
=>
{
let
code
=
searchParams
.
get
(
'code'
);
let
state
=
searchParams
.
get
(
'state'
);
sendCode
(
code
,
state
,
0
).
then
();
},
[]);
return
(
<
Segment
style
=
{{
minHeight
:
'300px'
}}
>
<
Dimmer
active
inverted
>
<
Loader
size
=
'large'
>
{
prompt
}
<
/Loader
>
<
/Dimmer
>
<
/Segment
>
);
};
export
default
LinuxDoOAuth
;
web/src/components/
GitHubOAuth
.js
→
web/src/components/
OAuth2Callback
.js
View file @
11cc44b4
...
...
@@ -5,57 +5,57 @@ import { API, showError, showSuccess, updateAPI } from '../helpers';
import
{
UserContext
}
from
'../context/User'
;
import
{
setUserData
}
from
'../helpers/data.js'
;
const
GitHubOAuth
=
(
)
=>
{
const
[
searchParams
,
setSearchParams
]
=
useSearchParams
();
const
OAuth2Callback
=
(
props
)
=>
{
const
[
searchParams
,
setSearchParams
]
=
useSearchParams
();
const
[
userState
,
userDispatch
]
=
useContext
(
UserContext
);
const
[
prompt
,
setPrompt
]
=
useState
(
'处理中...'
);
const
[
processing
,
setProcessing
]
=
useState
(
true
);
const
[
userState
,
userDispatch
]
=
useContext
(
UserContext
);
const
[
prompt
,
setPrompt
]
=
useState
(
'处理中...'
);
const
[
processing
,
setProcessing
]
=
useState
(
true
);
let
navigate
=
useNavigate
();
let
navigate
=
useNavigate
();
const
sendCode
=
async
(
code
,
state
,
count
)
=>
{
const
res
=
await
API
.
get
(
`/api/oauth/github
?code=
${
code
}
&state=
${
state
}
`
);
const
{
success
,
message
,
data
}
=
res
.
data
;
if
(
success
)
{
if
(
message
===
'bind'
)
{
showSuccess
(
'绑定成功!'
);
navigate
(
'/setting'
);
}
else
{
userDispatch
({
type
:
'login'
,
payload
:
data
});
localStorage
.
setItem
(
'user'
,
JSON
.
stringify
(
data
));
setUserData
(
data
);
updateAPI
()
showSuccess
(
'登录成功!'
);
navigate
(
'/token'
);
}
}
else
{
showError
(
message
);
if
(
count
===
0
)
{
setPrompt
(
`操作失败,重定向至登录界面中...`
);
navigate
(
'/setting'
);
// in case this is failed to bind GitHub
return
;
}
count
++
;
setPrompt
(
`出现错误,第
${
count
}
次重试中...`
);
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
count
*
2000
));
await
sendCode
(
code
,
state
,
count
);
}
};
const
sendCode
=
async
(
code
,
state
,
count
)
=>
{
const
res
=
await
API
.
get
(
`/api/oauth/
${
props
.
type
}
?code=
${
code
}
&state=
${
state
}
`
);
const
{
success
,
message
,
data
}
=
res
.
data
;
if
(
success
)
{
if
(
message
===
'bind'
)
{
showSuccess
(
'绑定成功!'
);
navigate
(
'/setting'
);
}
else
{
userDispatch
({
type
:
'login'
,
payload
:
data
});
localStorage
.
setItem
(
'user'
,
JSON
.
stringify
(
data
));
setUserData
(
data
);
updateAPI
()
showSuccess
(
'登录成功!'
);
navigate
(
'/token'
);
}
}
else
{
showError
(
message
);
if
(
count
===
0
)
{
setPrompt
(
`操作失败,重定向至登录界面中...`
);
navigate
(
'/setting'
);
// in case this is failed to bind GitHub
return
;
}
count
++
;
setPrompt
(
`出现错误,第
${
count
}
次重试中...`
);
await
new
Promise
((
resolve
)
=>
setTimeout
(
resolve
,
count
*
2000
));
await
sendCode
(
code
,
state
,
count
);
}
};
useEffect
(()
=>
{
let
code
=
searchParams
.
get
(
'code'
);
let
state
=
searchParams
.
get
(
'state'
);
sendCode
(
code
,
state
,
0
).
then
();
},
[]);
useEffect
(()
=>
{
let
code
=
searchParams
.
get
(
'code'
);
let
state
=
searchParams
.
get
(
'state'
);
sendCode
(
code
,
state
,
0
).
then
();
},
[]);
return
(
<
Segment
style
=
{{
minHeight
:
'300px'
}}
>
<
Dimmer
active
inverted
>
<
Loader
size
=
'large'
>
{
prompt
}
<
/Loader
>
<
/Dimmer
>
<
/Segment
>
);
return
(
<
Segment
style
=
{{
minHeight
:
'300px'
}}
>
<
Dimmer
active
inverted
>
<
Loader
size
=
'large'
>
{
prompt
}
<
/Loader
>
<
/Dimmer
>
<
/Segment
>
);
};
export
default
GitHubOAuth
;
export
default
OAuth2Callback
;
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment