🔖 chore: profile page displays icons based on whether third-party login is enabled. (#227)

* feat(系统设置&登录): 修改飞书登录是否启用判断逻辑和设置选项

1. 系统增加是否开启飞书登录选项
2. 登录使用通过系统设置判断是否启用飞书

* perf(用户中心): 优化用户中心绑定的第三方登录是否绑定判断和展示方式

优化用户中心绑定的第三方登录是否绑定判断和展示方式:
- 系统启动了指定登录方式并且用户已经绑定该方式则icon高亮,没绑定则默认颜色显示;
- 系统没有启动指定的登录方式则不显示指定登录方式icon
This commit is contained in:
ZeroDeng 2024-05-26 12:36:55 +08:00 committed by GitHub
parent af8c249e3f
commit 2b735e6dff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 51 additions and 14 deletions

View File

@ -35,6 +35,7 @@ var PasswordRegisterEnabled = true
var EmailVerificationEnabled = false var EmailVerificationEnabled = false
var GitHubOAuthEnabled = false var GitHubOAuthEnabled = false
var WeChatAuthEnabled = false var WeChatAuthEnabled = false
var LarkAuthEnabled = false
var TurnstileCheckEnabled = false var TurnstileCheckEnabled = false
var RegisterEnabled = true var RegisterEnabled = true

View File

@ -147,6 +147,13 @@ func getLarkUserInfoByCode(code string) (*LarkUser, error) {
} }
func LarkOAuth(c *gin.Context) { func LarkOAuth(c *gin.Context) {
if !common.LarkAuthEnabled {
c.JSON(http.StatusOK, gin.H{
"message": "管理员未开启通过飞书登录以及注册",
"success": false,
})
return
}
session := sessions.Default(c) session := sessions.Default(c)
state := c.Query("state") state := c.Query("state")
if state == "" || session.Get("oauth_state") == nil || state != session.Get("oauth_state").(string) { if state == "" || session.Get("oauth_state") == nil || state != session.Get("oauth_state").(string) {
@ -220,6 +227,13 @@ func LarkOAuth(c *gin.Context) {
} }
func LarkBind(c *gin.Context) { func LarkBind(c *gin.Context) {
if !common.LarkAuthEnabled {
c.JSON(http.StatusOK, gin.H{
"message": "管理员未开启通过飞书登录以及注册",
"success": false,
})
return
}
code := c.Query("code") code := c.Query("code")
larkUser, err := getLarkUserInfoByCode(code) larkUser, err := getLarkUserInfoByCode(code)
if err != nil { if err != nil {

View File

@ -28,6 +28,7 @@ func GetStatus(c *gin.Context) {
"email_verification": common.EmailVerificationEnabled, "email_verification": common.EmailVerificationEnabled,
"github_oauth": common.GitHubOAuthEnabled, "github_oauth": common.GitHubOAuthEnabled,
"github_client_id": common.GitHubClientId, "github_client_id": common.GitHubClientId,
"lark_login": common.LarkAuthEnabled,
"lark_client_id": common.LarkClientId, "lark_client_id": common.LarkClientId,
"system_name": common.SystemName, "system_name": common.SystemName,
"logo": common.Logo, "logo": common.Logo,

View File

@ -32,6 +32,7 @@ func InitOptionMap() {
common.OptionMap["EmailVerificationEnabled"] = strconv.FormatBool(common.EmailVerificationEnabled) common.OptionMap["EmailVerificationEnabled"] = strconv.FormatBool(common.EmailVerificationEnabled)
common.OptionMap["GitHubOAuthEnabled"] = strconv.FormatBool(common.GitHubOAuthEnabled) common.OptionMap["GitHubOAuthEnabled"] = strconv.FormatBool(common.GitHubOAuthEnabled)
common.OptionMap["WeChatAuthEnabled"] = strconv.FormatBool(common.WeChatAuthEnabled) common.OptionMap["WeChatAuthEnabled"] = strconv.FormatBool(common.WeChatAuthEnabled)
common.OptionMap["LarkAuthEnabled"] = strconv.FormatBool(common.LarkAuthEnabled)
common.OptionMap["TurnstileCheckEnabled"] = strconv.FormatBool(common.TurnstileCheckEnabled) common.OptionMap["TurnstileCheckEnabled"] = strconv.FormatBool(common.TurnstileCheckEnabled)
common.OptionMap["RegisterEnabled"] = strconv.FormatBool(common.RegisterEnabled) common.OptionMap["RegisterEnabled"] = strconv.FormatBool(common.RegisterEnabled)
common.OptionMap["AutomaticDisableChannelEnabled"] = strconv.FormatBool(common.AutomaticDisableChannelEnabled) common.OptionMap["AutomaticDisableChannelEnabled"] = strconv.FormatBool(common.AutomaticDisableChannelEnabled)
@ -136,6 +137,7 @@ var optionBoolMap = map[string]*bool{
"EmailVerificationEnabled": &common.EmailVerificationEnabled, "EmailVerificationEnabled": &common.EmailVerificationEnabled,
"GitHubOAuthEnabled": &common.GitHubOAuthEnabled, "GitHubOAuthEnabled": &common.GitHubOAuthEnabled,
"WeChatAuthEnabled": &common.WeChatAuthEnabled, "WeChatAuthEnabled": &common.WeChatAuthEnabled,
"LarkAuthEnabled": &common.LarkAuthEnabled,
"TurnstileCheckEnabled": &common.TurnstileCheckEnabled, "TurnstileCheckEnabled": &common.TurnstileCheckEnabled,
"RegisterEnabled": &common.RegisterEnabled, "RegisterEnabled": &common.RegisterEnabled,
"EmailDomainRestrictionEnabled": &common.EmailDomainRestrictionEnabled, "EmailDomainRestrictionEnabled": &common.EmailDomainRestrictionEnabled,

View File

@ -22,7 +22,10 @@ const config = {
turnstile_site_key: '', turnstile_site_key: '',
version: '', version: '',
wechat_login: false, wechat_login: false,
wechat_qrcode: '' wechat_qrcode: '',
lark_login: false,
lark_client_id: '',
telegram_bot: ''
} }
}; };

View File

@ -118,7 +118,7 @@ const LoginForm = ({ ...others }) => {
<WechatModal open={openWechat} handleClose={handleWechatClose} wechatLogin={wechatLogin} qrCode={siteInfo.wechat_qrcode} /> <WechatModal open={openWechat} handleClose={handleWechatClose} wechatLogin={wechatLogin} qrCode={siteInfo.wechat_qrcode} />
</Grid> </Grid>
)} )}
{siteInfo.lark_client_id && ( {siteInfo.lark_login && (
<Grid item xs={12}> <Grid item xs={12}>
<AnimateButton> <AnimateButton>
<Button <Button

View File

@ -144,21 +144,29 @@ export default function Profile() {
spacing={2} spacing={2}
sx={{ paddingBottom: '20px' }} sx={{ paddingBottom: '20px' }}
> >
<Label variant="ghost" color={inputs.wechat_id ? 'primary' : 'default'}> {status.wechat_login && (
<IconBrandWechat /> {inputs.wechat_id || '未绑定'} <Label variant="ghost" color={inputs.wechat_id ? 'primary' : 'default'}>
</Label> <IconBrandWechat /> {inputs.wechat_id || '未绑定'}
<Label variant="ghost" color={inputs.github_id ? 'primary' : 'default'}> </Label>
<IconBrandGithub /> {inputs.github_id || '未绑定'} )}
</Label> {status.github_oauth && (
<Label variant="ghost" color={inputs.github_id ? 'primary' : 'default'}>
<IconBrandGithub /> {inputs.github_id || '未绑定'}
</Label>
)}
<Label variant="ghost" color={inputs.email ? 'primary' : 'default'}> <Label variant="ghost" color={inputs.email ? 'primary' : 'default'}>
<IconMail /> {inputs.email || '未绑定'} <IconMail /> {inputs.email || '未绑定'}
</Label> </Label>
<Label variant="ghost" color={inputs.telegram_id ? 'primary' : 'default'}> {status.telegram_bot && (
<IconBrandTelegram /> {inputs.telegram_id || '未绑定'} <Label variant="ghost" color={inputs.telegram_id ? 'primary' : 'default'}>
</Label> <IconBrandTelegram /> {inputs.telegram_id || '未绑定'}
<Label variant="ghost" color={inputs.lark_id ? 'primary' : 'default'}> </Label>
<SvgIcon component={Lark} inheritViewBox="0 0 24 24" /> {inputs.lark_id || '未绑定'} )}
</Label> {status.lark_login && (
<Label variant="ghost" color={inputs.lark_id ? 'primary' : 'default'}>
<SvgIcon component={Lark} inheritViewBox="0 0 24 24" /> {inputs.lark_id || '未绑定'}
</Label>
)}
</Stack> </Stack>
<SubCard title="个人信息"> <SubCard title="个人信息">
<Grid container spacing={2}> <Grid container spacing={2}>

View File

@ -32,6 +32,7 @@ const SystemSetting = () => {
GitHubOAuthEnabled: '', GitHubOAuthEnabled: '',
GitHubClientId: '', GitHubClientId: '',
GitHubClientSecret: '', GitHubClientSecret: '',
LarkAuthEnabled: '',
LarkClientId: '', LarkClientId: '',
LarkClientSecret: '', LarkClientSecret: '',
Notice: '', Notice: '',
@ -95,6 +96,7 @@ const SystemSetting = () => {
case 'EmailVerificationEnabled': case 'EmailVerificationEnabled':
case 'GitHubOAuthEnabled': case 'GitHubOAuthEnabled':
case 'WeChatAuthEnabled': case 'WeChatAuthEnabled':
case 'LarkAuthEnabled':
case 'TurnstileCheckEnabled': case 'TurnstileCheckEnabled':
case 'EmailDomainRestrictionEnabled': case 'EmailDomainRestrictionEnabled':
case 'RegisterEnabled': case 'RegisterEnabled':
@ -298,6 +300,12 @@ const SystemSetting = () => {
control={<Checkbox checked={inputs.WeChatAuthEnabled === 'true'} onChange={handleInputChange} name="WeChatAuthEnabled" />} control={<Checkbox checked={inputs.WeChatAuthEnabled === 'true'} onChange={handleInputChange} name="WeChatAuthEnabled" />}
/> />
</Grid> </Grid>
<Grid xs={12} md={3}>
<FormControlLabel
label="允许通过飞书登录 & 注册"
control={<Checkbox checked={inputs.LarkAuthEnabled === 'true'} onChange={handleInputChange} name="LarkAuthEnabled" />}
/>
</Grid>
<Grid xs={12} md={3}> <Grid xs={12} md={3}>
<FormControlLabel <FormControlLabel
label="允许新用户注册(此项为否时,新用户将无法以任何方式进行注册)" label="允许新用户注册(此项为否时,新用户将无法以任何方式进行注册)"