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}"
|
"users-#{id}"
|
||||||
end
|
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!
|
def estimate_default_language!
|
||||||
identity = identities.find_by(provider: "twitter")
|
identity = identities.find_by(provider: "twitter")
|
||||||
if email.end_with?(".jp")
|
if email.end_with?(".jp")
|
||||||
|
|
|
||||||
|
|
@ -59,8 +59,7 @@ class AuthorizationService
|
||||||
)
|
)
|
||||||
user.name = auth.info.nickname if user.name.blank?
|
user.name = auth.info.nickname if user.name.blank?
|
||||||
user.skip_confirmation!
|
user.skip_confirmation!
|
||||||
user.remember_me!
|
user.set_remember_fields
|
||||||
user.remember_me = true
|
|
||||||
add_social_identity_data(user)
|
add_social_identity_data(user)
|
||||||
user.saw_onboarding = false
|
user.saw_onboarding = false
|
||||||
user.save!
|
user.save!
|
||||||
|
|
@ -69,8 +68,7 @@ class AuthorizationService
|
||||||
end
|
end
|
||||||
|
|
||||||
def update_user(user)
|
def update_user(user)
|
||||||
user.remember_me!
|
user.set_remember_fields
|
||||||
user.remember_me = true
|
|
||||||
user.github_username = auth.info.nickname if auth.provider == "github" && auth.info.nickname != user.github_username
|
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
|
user.twitter_username = auth.info.nickname if auth.provider == "twitter" && auth.info.nickname != user.twitter_username
|
||||||
add_social_identity_data(user)
|
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