аутентификация рельсов для API - PullRequest
3 голосов
/ 16 сентября 2011

В настоящее время я работаю над приложением, которое в дополнение к обычному наглядному веб-приложению также предоставит несколько API-сервисов RESTful для использования сторонними приложениями. Я использую Devise для управления аутентификацией пользователей, но я борюсь с тем, как «вручную» аутентифицировать пользователя при определенных входных данных.

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

Я знаю, что вы можете подписать пользователя, используя sign_in метод, который предоставляет Devise, но, похоже, он полностью игнорирует аутентификацию. вот что я хотел сделать, объяснил немного подробнее:

Предположим, GET-маршрут называется connect в пользовательском контроллере контроллер полностью заменяет контроллер регистрации Devise, но не сеансовый. URL моего сервиса будет:

<server>/users/connect

и ожидаются параметры 'email', 'password' в дополнение к некоторым специфическим службам и неважным для моего вопроса.

Я хочу знать, как реализовать что-то, эквивалентное следующему псевдокоду:

def connect
  user = User.find_by_email(params[:email])
  password = params[:password]
  # here is the part I'm pseudo coding out
  if user.is_valid_password(password) 
    ...do my stuff...
  end

  render :json ...etc...
end

Мне не удалось найти метод в источнике Devise для этого - он настолько обобщен во многих отношениях, что я, вероятно, просто упускаю его.

У кого-нибудь есть идеи? Я надеюсь, что не а) придется реализовывать свое дело и б) не нужно уходить от Devise. Он предоставляет мне так много для не-API сервисов ...

спасибо!

Я пропустил th

1 Ответ

2 голосов
/ 16 сентября 2011

Devise token_authenticatable - это способ сделать это.Мы успешно использовали его много раз для входа в систему на основе API.

В config / initializers / devise.rb

config.token_authentication_key = :nameofyourapikeyhere

В user.rb:

devise … token_authenticatable, ...

В приведенном выше примере ключу API можно присвоить любое имя, а затеместь ваш маршрут как / users / connect? apikey = что угодно (на примере apikey).В базе данных это будет authentic_token, но он будет работать нормально.

Чтобы уточнить, есть ли у пользователя authentication_token и он отправлен в параметрах (или его псевдоним - в приведенном выше примере: apikey), они войдут в систему.

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