Ruby on Rails IF Проверка проверки операторов - PullRequest
0 голосов
/ 17 мая 2018

, так что я новичок в ruby ​​on rails и у меня возникла проблема с этим оператором if, в основном я проверяю, существует ли токен подтверждения в базе данных sql для входа в адрес электронной почты. Если он действительно возвращает сообщение, ваше письмо не подтверждено. После того, как вы щелкнете ссылку в письме, он удалит токен из базы данных. Затем вы можете перейти к авторизации. Я не могу заставить это работать на всю жизнь. Все остальное работает, кроме проверки. Спасибо за вашу помощь !!!

 def authenticate(email, password)
   command = AuthenticateUser.call(email, password)
   user = User.find_by email:(email)
   confirmationtoken = 
   User.find_by_confirmation_token(params[:confirmation_token].to_s)
   if user.present? && confirmationtoken.present?
     render json: {error: 'Email not verified' }, status: :unauthorized
   elsif command.success?
     render json: {
       access_token: command.result,
       message: 'Login Successful'
     }
     else
       render json: { error: command.errors }, status: :unauthorized
     end
   end

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я думаю, что это поможет очистить вашу логику, поскольку нет необходимости дважды выполнять поиск пользователя. И поиск пользователя и использование объекта может вызвать проблемы с безопасностью. Позвольте AuthenticateUser найти пользователя и добиться успеха, если он находится в системе. Когда вы отправляете электронное письмо, просто создайте в нем кнопку со ссылкой на конечную точку, которая проверит электронную почту и установит токен подтверждения на ноль.

 def authenticate(email, password)
   command = AuthenticateUser.call(email, password)
   has_confirmation_token = 
   User.find_by_confirmation_token(params[:confirmation_token]).present?
   if !has_confirmation_token && !command.success?
     render json: {error: 'Email not verified' }, status: :unauthorized
   elsif command && command.success?
     render json: {
       access_token: command.result,
       message: 'Login Successful'
     }
     else
       render json: { error: command.errors }, status: :unauthorized
     end
   end
0 голосов
/ 17 мая 2018

Вы можете просто проверить, установлен ли атрибут пользователя confirmation_token:

user = User.find_by(email: email)
if user && user.confirmation_token.present?
  # ...
elsif command.success?
  # ...
else
  # ...
end

user.confirmation_token.present? можно сократить до user.confirmation_token?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...