@@ -653,41 +653,26 @@ func handleOAuth2SignIn(u *models.User, gothUser goth.User, ctx *context.Context
653
653
ctx .Redirect (setting .AppSubURL + "/user/two_factor" )
654
654
}
655
655
656
- // OAuth2UserLoginCallback attempts to handle the callback from the OAuth2 provider and if successful
657
- // login the user
656
+ // OAuth2UserLoginCallback attempts to handle the callback from the
657
+ // OAuth2 provider and if successful login the user
658
658
func oAuth2UserLoginCallback (loginSource * models.LoginSource , request * http.Request , response http.ResponseWriter ) (* models.User , goth.User , error ) {
659
659
gothUser , err := oauth2 .ProviderCallback (loginSource .Name , request , response )
660
660
661
661
if err != nil {
662
662
return nil , goth.User {}, err
663
663
}
664
664
665
- user := & models.User {
666
- LoginName : gothUser .UserID ,
667
- LoginType : models .LoginOAuth2 ,
668
- LoginSource : loginSource .ID ,
669
- }
670
-
671
- hasUser , err := models .GetUser (user )
672
- if err != nil {
673
- return nil , goth.User {}, err
674
- }
675
-
676
- if hasUser {
677
- return user , goth.User {}, nil
678
- }
679
-
680
665
// search in external linked users
681
666
externalLoginUser := & models.ExternalLoginUser {
682
667
ExternalID : gothUser .UserID ,
683
668
LoginSourceID : loginSource .ID ,
684
669
}
685
- hasUser , err = models .GetExternalLogin (externalLoginUser )
670
+ hasUser , err : = models .GetExternalLogin (externalLoginUser )
686
671
if err != nil {
687
672
return nil , goth.User {}, err
688
673
}
689
674
if hasUser {
690
- user , err = models .GetUserByID (externalLoginUser .UserID )
675
+ user , err : = models .GetUserByID (externalLoginUser .UserID )
691
676
return user , goth.User {}, err
692
677
}
693
678
@@ -899,19 +884,11 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
899
884
}
900
885
}
901
886
902
- loginSource , err := models .GetActiveOAuth2LoginSourceByName (gothUser .(goth.User ).Provider )
903
- if err != nil {
904
- ctx .ServerError ("CreateUser" , err )
905
- }
906
-
907
887
u := & models.User {
908
- Name : form .UserName ,
909
- Email : form .Email ,
910
- Passwd : form .Password ,
911
- IsActive : ! setting .Service .RegisterEmailConfirm ,
912
- LoginType : models .LoginOAuth2 ,
913
- LoginSource : loginSource .ID ,
914
- LoginName : gothUser .(goth.User ).UserID ,
888
+ Name : form .UserName ,
889
+ Email : form .Email ,
890
+ Passwd : form .Password ,
891
+ IsActive : ! setting .Service .RegisterEmailConfirm ,
915
892
}
916
893
917
894
if err := models .CreateUser (u ); err != nil {
@@ -935,6 +912,13 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
935
912
}
936
913
log .Trace ("Account created: %s" , u .Name )
937
914
915
+ // Link the oAuth account to the user
916
+ err := models .LinkAccountToUser (u , gothUser .(goth.User ))
917
+ if err != nil {
918
+ ctx .ServerError ("UserLinkAccount" , err )
919
+ }
920
+ log .Trace ("Account %s linked to gothUser %s" , u .Name , gothUser .(goth.User ))
921
+
938
922
// Auto-set admin for the only user.
939
923
if models .CountUsers () == 1 {
940
924
u .IsAdmin = true
@@ -1235,7 +1219,7 @@ func ForgotPasswdPost(ctx *context.Context) {
1235
1219
return
1236
1220
}
1237
1221
1238
- if ! u .IsLocal () && ! u . IsOAuth2 () {
1222
+ if ! u .IsLocal () {
1239
1223
ctx .Data ["Err_Email" ] = true
1240
1224
ctx .RenderWithErr (ctx .Tr ("auth.non_local_account" ), tplForgotPassword , nil )
1241
1225
return
0 commit comments