Don't make additional SQL query on remembering user (#2335)
* Don't save when remembering user on sign in (WIP) * Specs for AuthorizationService
This commit is contained in:
parent
f23235eab9
commit
4ef7635ae0
3 changed files with 55 additions and 4 deletions
|
|
@ -207,6 +207,11 @@ class User < ApplicationRecord
|
|||
"users-#{id}"
|
||||
end
|
||||
|
||||
def set_remember_fields
|
||||
self.remember_token ||= self.class.remember_token if respond_to?(:remember_token)
|
||||
self.remember_created_at ||= Time.now.utc
|
||||
end
|
||||
|
||||
def estimate_default_language!
|
||||
identity = identities.find_by(provider: "twitter")
|
||||
if email.end_with?(".jp")
|
||||
|
|
|
|||
|
|
@ -59,8 +59,7 @@ class AuthorizationService
|
|||
)
|
||||
user.name = auth.info.nickname if user.name.blank?
|
||||
user.skip_confirmation!
|
||||
user.remember_me!
|
||||
user.remember_me = true
|
||||
user.set_remember_fields
|
||||
add_social_identity_data(user)
|
||||
user.saw_onboarding = false
|
||||
user.save!
|
||||
|
|
@ -69,8 +68,7 @@ class AuthorizationService
|
|||
end
|
||||
|
||||
def update_user(user)
|
||||
user.remember_me!
|
||||
user.remember_me = true
|
||||
user.set_remember_fields
|
||||
user.github_username = auth.info.nickname if auth.provider == "github" && auth.info.nickname != user.github_username
|
||||
user.twitter_username = auth.info.nickname if auth.provider == "twitter" && auth.info.nickname != user.twitter_username
|
||||
add_social_identity_data(user)
|
||||
|
|
|
|||
48
spec/services/authorization_service_spec.rb
Normal file
48
spec/services/authorization_service_spec.rb
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe AuthorizationService do
|
||||
before { mock_auth_hash }
|
||||
|
||||
describe "new user" do
|
||||
let(:auth) { OmniAuth.config.mock_auth[:github] }
|
||||
let(:service) { described_class.new(auth) }
|
||||
|
||||
it "creates a new user" do
|
||||
expect do
|
||||
service.get_user
|
||||
end.to change(User, :count).by(1)
|
||||
end
|
||||
|
||||
it "sets remember_me for the new user" do
|
||||
user = service.get_user
|
||||
user.reload
|
||||
expect(user.remember_me).to be_truthy
|
||||
expect(user.remember_token).to be_truthy
|
||||
expect(user.remember_created_at).to be_truthy
|
||||
end
|
||||
end
|
||||
|
||||
describe "existing user" do
|
||||
let(:auth) { OmniAuth.config.mock_auth[:twitter] }
|
||||
let(:user) { create(:user) }
|
||||
|
||||
before { OmniAuth.config.mock_auth[:twitter].info.email = user.email }
|
||||
|
||||
it "doesn't create a duplicate user" do
|
||||
service = described_class.new(auth)
|
||||
expect do
|
||||
service.get_user
|
||||
end.not_to change(User, :count)
|
||||
end
|
||||
|
||||
it "sets remember_me for the existing user" do
|
||||
user.update_columns(remember_token: nil, remember_created_at: nil)
|
||||
service = described_class.new(auth)
|
||||
service.get_user
|
||||
user.reload
|
||||
expect(user.remember_me).to be_truthy
|
||||
expect(user.remember_token).to be_truthy
|
||||
expect(user.remember_created_at).to be_truthy
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Reference in a new issue