User.set_automatic_groups is not called for all social logins

AI-generated summary

The user.set_automatic_groups function is not consistently called across all social login providers, including GitHub, Facebook, and Twitter. jomaxro proposes that this function should be called by all providers or extracted to a shared function for consistency. supermathie suggests that it could also be triggered in the UserEmail controller when a user’s email address is updated or when autogroup rules change. A pull request (Osama) has been sent and merged (Osama) to address this issue.

Our Google login provider has the following code:

def after_create_account(user, auth)
  data = auth[:extra_data]
  GoogleUserInfo.create({ user_id: user.id }.merge(data))
  if auth[:email_valid].to_s == 'true' && data[:email]&.downcase == user.email
    EmailToken.confirm(user.email_tokens.first.token)
    user.set_automatic_groups
  end
end

Specifically, user.set_automatic_groups ensures that automatic group rules are applied to the user. This function is not called by our other auto providers, including GitHub, Facebook, and Twitter. We should ensure that all social login provider call user.set_automatic_groups, or that the call is extracted to a shared function that all providers use.

cc @supermathie @n-b-sonar

8 Likes

I was pondering earlier whether it would make sense to just fire this in e.g. User.logged_in so that it’s refreshed on login, but without delving into it it probably makes sense to trigger this:

  • in the UserEmail controller when a user’s (verified) email address is updated
  • when the autogroup rules change
5 Likes

I’ve sent a PR for this:

https://github.com/discourse/discourse/pull/5848

6 Likes

PR merged thanks to @tgxworld :tada: :confetti_ball:

5 Likes