diff --git a/app/models/user.rb b/app/models/user.rb index b9fc096..3ed1769 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -59,12 +59,12 @@ def authenticate(password) end def self.from_token_request(request) - login = request.params['auth'] && request.params['auth']['login'] - active.find_by login: login + return nil unless request.params['auth'] && request.params['auth']['login'] + credential = request.params['auth']['login'] + active.where(['login = ? OR email = ?', credential, credential]).first end def self.from_token_payload(payload) - logger.fatal payload.inspect active.find_by id: (payload['sub'] || payload[:sub]) end diff --git a/spec/controllers/user_token_controller_spec.rb b/spec/controllers/user_token_controller_spec.rb index 8138e04..13b4414 100644 --- a/spec/controllers/user_token_controller_spec.rb +++ b/spec/controllers/user_token_controller_spec.rb @@ -2,7 +2,7 @@ describe UserTokenController do describe '#create' do - context 'with valid credentials' do + context 'with valid login credentials' do before(:each) do user = create(:user) post :create, params: {auth: {login: user.login, password: 'password'}} @@ -17,6 +17,21 @@ end end + context 'with valid email credentials' do + before(:each) do + user = create(:user) + post :create, params: {auth: {login: user.email, password: 'password'}} + end + + it 'returns JWT token' do + expect(json_response).to have_key('jwt') + end + + it 'has a 200 status' do + expect(response.status).to be(201) + end + end + context 'with invalid credentials' do it 'has a 404 status for unconfirmed account' do user = create(:user, email_confirmed: false) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 5bbb34d..e0e5d63 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -110,6 +110,15 @@ expect(User.from_token_request(request)).to eq(user) end + it 'finds record by email based on params[auth][login]' do + user = create(:user) + request = instance_double(ActionDispatch::Request) + allow(request).to receive(:params).and_return( + 'auth' => { 'login' => user.email } + ) + expect(User.from_token_request(request)).to eq(user) + end + it 'returns nil if cannot find by params[auth][login]' do create(:user) request = instance_double(ActionDispatch::Request)