@@ -448,41 +448,26 @@ func handleOAuth2SignIn(u *models.User, gothUser goth.User, ctx *context.Context
448
448
ctx .Redirect (setting .AppSubURL + "/user/two_factor" )
449
449
}
450
450
451
- // OAuth2UserLoginCallback attempts to handle the callback from the OAuth2 provider and if successful
452
- // login the user
451
+ // OAuth2UserLoginCallback attempts to handle the callback from the
452
+ // OAuth2 provider and if successful login the user
453
453
func oAuth2UserLoginCallback (loginSource * models.LoginSource , request * http.Request , response http.ResponseWriter ) (* models.User , goth.User , error ) {
454
454
gothUser , err := oauth2 .ProviderCallback (loginSource .Name , request , response )
455
455
456
456
if err != nil {
457
457
return nil , goth.User {}, err
458
458
}
459
459
460
- user := & models.User {
461
- LoginName : gothUser .UserID ,
462
- LoginType : models .LoginOAuth2 ,
463
- LoginSource : loginSource .ID ,
464
- }
465
-
466
- hasUser , err := models .GetUser (user )
467
- if err != nil {
468
- return nil , goth.User {}, err
469
- }
470
-
471
- if hasUser {
472
- return user , goth.User {}, nil
473
- }
474
-
475
460
// search in external linked users
476
461
externalLoginUser := & models.ExternalLoginUser {
477
462
ExternalID : gothUser .UserID ,
478
463
LoginSourceID : loginSource .ID ,
479
464
}
480
- hasUser , err = models .GetExternalLogin (externalLoginUser )
465
+ hasUser , err : = models .GetExternalLogin (externalLoginUser )
481
466
if err != nil {
482
467
return nil , goth.User {}, err
483
468
}
484
469
if hasUser {
485
- user , err = models .GetUserByID (externalLoginUser .UserID )
470
+ user , err : = models .GetUserByID (externalLoginUser .UserID )
486
471
return user , goth.User {}, err
487
472
}
488
473
@@ -620,19 +605,11 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
620
605
return
621
606
}
622
607
623
- loginSource , err := models .GetActiveOAuth2LoginSourceByName (gothUser .(goth.User ).Provider )
624
- if err != nil {
625
- ctx .Handle (500 , "CreateUser" , err )
626
- }
627
-
628
608
u := & models.User {
629
609
Name : form .UserName ,
630
610
Email : form .Email ,
631
611
Passwd : form .Password ,
632
612
IsActive : ! setting .Service .RegisterEmailConfirm ,
633
- LoginType : models .LoginOAuth2 ,
634
- LoginSource : loginSource .ID ,
635
- LoginName : gothUser .(goth.User ).UserID ,
636
613
}
637
614
638
615
if err := models .CreateUser (u ); err != nil {
@@ -656,6 +633,13 @@ func LinkAccountPostRegister(ctx *context.Context, cpt *captcha.Captcha, form au
656
633
}
657
634
log .Trace ("Account created: %s" , u .Name )
658
635
636
+ // Link the oAuth account to the user
637
+ err := models .LinkAccountToUser (u , gothUser .(goth.User ))
638
+ if err != nil {
639
+ ctx .Handle (500 , "UserLinkAccount" , err )
640
+ }
641
+ log .Trace ("Account %s linked to gothUser %s" , u .Name , gothUser .(goth.User ))
642
+
659
643
// Auto-set admin for the only user.
660
644
if models .CountUsers () == 1 {
661
645
u .IsAdmin = true
@@ -913,7 +897,7 @@ func ForgotPasswdPost(ctx *context.Context) {
913
897
return
914
898
}
915
899
916
- if ! u .IsLocal () && ! u . IsOAuth2 () {
900
+ if ! u .IsLocal () {
917
901
ctx .Data ["Err_Email" ] = true
918
902
ctx .RenderWithErr (ctx .Tr ("auth.non_local_account" ), tplForgotPassword , nil )
919
903
return
0 commit comments