Всем привет!
Разрабатываю апишку для рельсо-приложения(бэкэнд для мобильного клиента), в котором авторизация издавне происходила Devise'ом. С веб версией все понятно, давно работает как часы — у пользователя может быть несколько активных сессий на разных компах. Но с мобильной авторизацией все видимо плохо, по крайне мере у меня. Есть базовая модель User:
devise :database_authenticatable,
:registerable,
:recoverable,
:rememberable,
:trackable,
:validatable,
:token_authenticatable,
:omniauthable
В user_api_controller'е соответственно есть строки атворизации:
before_filter :authenticate_user!, except: [ :new, :sign_in ]
def sign_in
if params[:user][:email].blank? and params[:user][:name].blank?
return render status: 404, json: { error: "You must specify email or name"}
end
if params[:user][:email]
user = User.find_by_email(email: params[:user][:email].downcase)
elsif params[:user][:name]
user = User.where("lower(name) = ?", params[:user][:name].downcase).first
end
if user.blank?
return render status: 404, json: { error: "User not found" }
end
if user.valid_password? params[:user][:password]
user.reset_authentication_token!
return render status: 200, json: { token: user.authentication_token }
else
return render status: 401, json: { error: "Invalid password" }
end
end
Все хорошо, но у пользователя может быть только одна сессия, те я захожу с одного клиента(с 5ого айфона конечно) — все оки захожу под тем же именем с другого — на первом соответственно токен становится невалидным и все плохо. Ну оно и понятно, в структуре бд учитывается, что у юзера только идин токен=( Можно ли данную ситуацию исправить с помощью рельсовой магии? Или лучше написать отдельный модуль, независимый от devise'a? Может быть можно devise'у как-нибудь редиску всунуть для хранения токенов для апи?
Может быть знаете хорошие готовые gem'ы для апи авторизации?
заранее спасибо!