Подтвердить что ты не робот

Использование нового приложения для аутентификации для мобильного приложения

Я пытаюсь выполнить аутентификацию пользователя с помощью Devise для моего приложения Rails/iOS. У меня проблемы, поскольку я в основном был "пользователем" Devise и использовал его для чистых веб-приложений, поэтому не нужно было так много беспокоиться о том, что происходит за кулисами. Теперь, когда мне нужно создать аутентификацию для приложения на основе API, это совсем другой мир.

Я прочитал каждый учебник в Интернете, посвященный этой теме (большинство из них устарело из-за того, что token_authenticatable устарел), но все еще не понимает, что мне нужно делать.

Я также читаю оригинальный GitHub gist, говорящий о этой проблеме и до сих пор не понимаю, о чем они говорят.

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

Может ли кто-нибудь предоставить краткое решение для внедрения системы аутентификации на основе API для мобильного приложения? Я имею в виду, что это не может быть сложным, Devise был таким потрясающим, поскольку все, что мне нужно было сделать, было запустить rails generate, но для меня это был кошмар.

4b9b3361

Ответ 1

Я работаю над теми же вещами, которые вам нужны,

для этого вам нужно использовать аутентификацию на токене, а не просто Придумайте, добавьте следующий gem в gemfile

  # Use device for authentication
    gem 'devise'
    gem 'simple_token_authentication'

следовать документации simple_token_authentication

Use Api like this

curl -v https://example.com/users/sign_in -X POST -H "Accept: application/json" -H "Content-Type: application/json" -d '{"user": {"login": "7838712847" ,"password": "8489", "mobile_type": "ios", "mobile_key": "APA91bG6G4UvjeCWvb8mMAH1ZO3I-8FB3nkRPyCHnwZiXgd16HK18GgoV5n7gjJtZNs038iaFGutzdxnhes3WyaXEX52-xmOyvuEK8S1abBdpuhD9AD5bzLWeu-1Ow_yZRTVg3Nypz1z"}}'

I am using mobile number to login so customize gem according your need

пожалуйста, дайте мне знать, если он не работает (напишите мне: [email protected])

Ответ 2

Недавно нам также пришлось настроить аутентификацию на токенах для нашего webapp (для доступа к API) - и мы также наткнулись на то, что он был удален из Devise.

Мы пошли с Simple Token Authentication, которая работала просто красиво.

Ответ 3

Вот подход, который отлично подходит для меня при использовании Devise для аутентификации в приложении Rails. Если сначала тестируются маркеры (вы можете установить токен любым приложением iOS, Android,...) и вернуться к методу аутентификации по умолчанию для ваших веб-пользователей.

Рельсы

Добавьте свой собственный токен в модель пользователя, добавив столбец строки: api_token и заполните его уникальным значением для каждого пользователя. Использование Digest:: SHA1 некоторых пользовательских данных (например, id + email) является хорошей отправной точкой, но вы можете (и должны) идти как сумасшедшие, как вам нравится, когда дело доходит до создания уникального токена.

Создайте метод аутентификации над этим токеном. Вы можете добавить его в свой основной ApplicationController для легкого доступа (не забудьте поставить этот метод в свою частную часть контроллера);

def authenticate_user_by_token
  @api_token = request.headers['HTTP_AUTHORIZATION']

  if @api_token.present? && @user = User.find_by_api_token(@api_token)
    sign_in @user
    return @user
  else
    return false
  end
end

Затем создайте (частный) метод и привяжите этот метод к разработке перед использованием метода фильтра (например: authenticate_user! например). Поместите его в тот же контроллер, что и метод выше для легкого доступа;

def authenticate_by_token_or_devise!
  return authenticate_user! unless authenticate_user_by_token
end

Теперь замените свой текущий запрос before_filter: authenticate_user! к вновь созданному;: authenticate_by_token_or_devise!, например,

before_filter :authenticate_by_token_or_devise!

Или, начиная с рельсов 4 (Rails 4: before_filter против before_action), используйте before_action;

before_action :authenticate_by_token_or_devise!

IOS

Теперь вам нужно добавить этот токен в приложение iOS. В зависимости от структуры, которую вы используете в своем приложении, это может отличаться от приведенного ниже кода.

В этом примере я использую AFNetworking (https://github.com/AFNetworking/AFNetworking). Таким образом вы устанавливаете токен заголовка авторизации в вашем AFHTTPRequestOperationManager, чтобы он добавлялся к каждому вашему запросу.

NSString *apiToken = @"your-token-here";
[[_manager requestSerializer] setValue:apiToken forHTTPHeaderField:@"Authorization"];

Дополнительно

Кроме того, вы можете создать метод перед фильтром, который позволяет получить доступ только к аутентификации на основе токенов (например, если у вас есть набор/api-маршрутов, к которым вы хотите получить доступ, используя токен), например:

def authenticate_user_by_token!
  if !authenticate_user_by_token
    render nothing: true, status: :unauthorized and return
  end
end

Ответ 4

Когда я недавно реализовал API, я неохотно следовал предложению использовать Warden, стойку аутентификации на стойке. Мое мнение состояло в том, что подлинный камень, который требовал от вас написать собственную аутентификацию, был сломан. Но этот драгоценный камень обеспечивает только правильный уровень контроля. Моя единственная жалоба заключается в том, что самоцвет не очень хорошо обрабатывает параметры POST. Я смог обойти это, но такая озабоченность должна быть (IMO) обработана камнем.

Используя его, я настоятельно рекомендую этот камень для любого сценария, требующего не общей аутентификации. Роллинг собственных стратегий аутентификации - это радость, потому что (а) она довольно проста и (б) вы не связаны с предположениями других разработчиков.

Чтобы помочь вам начать, вот мой файл config/initializers/warden.rb.

Ответ 5

Вы можете использовать комбинацию драгоценных камней разработки и привратника для поддержки аутентификации в Интернете и на мобильных устройствах.

Например, я использовал программу для регистрации пользователей и обработки забытых паролей и потока подтверждения электронной почты. Для мобильных клиентов я использовал драгоценный камень привратника в качестве поставщика oauth2 для защиты моего apis. Существует много потоков грантов oauth2, поддерживаемых драгоценными камнями привратника, и я предлагаю вам взглянуть на них.

Здесь ссылка! для начала