]> source.dussan.org Git - gitea.git/commitdiff
Fix goth user infer bug (#15821)
authorLunny Xiao <xiaolunwen@gmail.com>
Mon, 10 May 2021 15:31:32 +0000 (23:31 +0800)
committerGitHub <noreply@github.com>
Mon, 10 May 2021 15:31:32 +0000 (16:31 +0100)
routers/user/auth.go

index cfe116c9026603a943f6d950410d38a643692320..5f8b1a6b99a7bc92da83647a9f2d6cf652f9fb29 100644 (file)
@@ -983,11 +983,16 @@ func LinkAccountPostRegister(ctx *context.Context) {
        ctx.Data["SignInLink"] = setting.AppSubURL + "/user/link_account_signin"
        ctx.Data["SignUpLink"] = setting.AppSubURL + "/user/link_account_signup"
 
-       gothUser := ctx.Session.Get("linkAccountGothUser")
-       if gothUser == nil {
+       gothUserInterface := ctx.Session.Get("linkAccountGothUser")
+       if gothUserInterface == nil {
                ctx.ServerError("UserSignUp", errors.New("not in LinkAccount session"))
                return
        }
+       gothUser, ok := gothUserInterface.(goth.User)
+       if !ok {
+               ctx.ServerError("UserSignUp", fmt.Errorf("session linkAccountGothUser type is %t but not goth.User", gothUserInterface))
+               return
+       }
 
        if ctx.HasError() {
                ctx.HTML(http.StatusOK, tplLinkAccount)
@@ -1049,7 +1054,7 @@ func LinkAccountPostRegister(ctx *context.Context) {
                }
        }
 
-       loginSource, err := models.GetActiveOAuth2LoginSourceByName(gothUser.(goth.User).Provider)
+       loginSource, err := models.GetActiveOAuth2LoginSourceByName(gothUser.Provider)
        if err != nil {
                ctx.ServerError("CreateUser", err)
        }
@@ -1061,10 +1066,10 @@ func LinkAccountPostRegister(ctx *context.Context) {
                IsActive:    !(setting.Service.RegisterEmailConfirm || setting.Service.RegisterManualConfirm),
                LoginType:   models.LoginOAuth2,
                LoginSource: loginSource.ID,
-               LoginName:   gothUser.(goth.User).UserID,
+               LoginName:   gothUser.UserID,
        }
 
-       if !createAndHandleCreatedUser(ctx, tplLinkAccount, form, u, gothUser.(*goth.User), false) {
+       if !createAndHandleCreatedUser(ctx, tplLinkAccount, form, u, &gothUser, false) {
                // error already handled
                return
        }