Разрешить разработку входа с alias_attribute - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь создать API, который работает с существующим мобильным приложением. Мобильное приложение использует имя пользователя, но на самом деле это всего лишь электронная почта, и вместо того, чтобы переделывать, создайте запутанную систему имени пользователя, которая на самом деле является электронной почтой. Я хотел использовать alias_attribute. Кажется, работает для всего, кроме входа в систему. JSON выглядит как

{ "username":"test12345@gmail.com", "password":"password" }

и я разрешаю ключи devise_parameter_sanitizer.permit(:sign_in, keys: [:username, :password]) но это не удается в self.resource = warden.authenticate!(auth_options) Кажется, надзиратель игнорирует alias_attribute. Если я изменю имя пользователя на email, оно будет работать нормально. Я попытался переписать функцию аутентификации базы данных на модели, но она никогда не доходит до этой строки.

1 Ответ

0 голосов
/ 08 июля 2019

Из того, что я могу сказать, гораздо проще переопределить поведение по умолчанию session_controller

внутри вашего контроллера сессий:

def create
  if params[:user][:username]
    params[:user][:email] = params[:user][:username]
  end
  super
end

или если вы не хотите переопределять create метод, затем добавьте

before_action :override_params, only: :create

def override_params
  if params[:user][:username]
    params[:user][:email] = params[:user][:username]
  end
end

это не приятно, но должно сработать.И если вам не нужно переписывать внутренности устройства, я бы попробовал.

В противном случае вам придется

  1. добавить новый ключ аутентификации.чтобы разработать инициализатор (внутри config/initializers/devise.rb добавить config.authentication_keys = [:email, :username])

  2. , тогда вам придется переопределить find_for_database_authnetication в User модели для поиска пользователя по значению параметра имени пользователя (проверьтеhttps://github.com/plataformatec/devise/blob/master/lib/devise/models/database_authenticatable.rb#L231). Потому что alias_attribute на самом деле не поможет вам в этом сценарии

  3. возможно, некоторые другие шаги также

Всев общем, грязный метод кажется более простым и более простым

РЕДАКТИРОВАТЬ:

также, закажите эту страницу https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign_in-using-their-username-or-email-address

возможно, это будет полезно

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