deviseAPIauthentication
我正在开发一个Rails Web应用程序,该应用程序还为移动设备提供基于JSON的API。 预期移动客户端首先获得带有(email / pass)的令牌,然后客户端将使用该令牌进行后续的API调用。
对于Devise来说,我相当新,我正在寻找一个Devise API的外观,如“authenticate(email,pass)”,并期望它返回true / false,然后基于此创build并回传令牌或返回一个拒绝消息,但似乎Devise不提供这样的东西。
我知道Devise 1.3提供了基于JSON的身份validation,但是这与我所需要的有点不同 – 我需要生成令牌并处理回客户端,然后使用令牌完成身份validation。
有人可以给一些指针吗?
有一个deviseconfiguration称为:token_authenticatable
。 所以,如果你把它添加到你的“用户”的devise方法,那么你可以通过调用在你的API进行身份validation
"/api/v1/recipes?qs=sweet&auth_token=[@user.auth_token]"
你可能也想在你的用户中这样做:
before_save :ensure_authentication_token
更新 (使用API授权码)
你正在寻找的方法是:
resource = User.find_for_database_authentication(:login=>params[:user_login][:login]) resource.valid_password?(params[:user_login][:password])
这是我的要点与devise的全面的JSON / APIlogin
devise基于Warden,一个Rackauthentication中间件。
如果你需要实现自己的(另一种)validation用户身份的方法,你应该看看守望者与Devise提供的策略相结合: https : //github.com/plataformatec/devise/tree/master/lib /devise/战略
我build议通过Devise Wiki阅读,因为Devise本身支持令牌authentication作为它的一个模块。 我还没有亲自在Devise中使用令牌authentication,但是Brandon Martin 在这里有一个示例令牌authentication的例子。
如果令牌authentication不是你想要做的,你也可以返回一个cookie,让客户端在请求头中包含cookie。 它和Web会话控制器非常相似。
在一个API会话控制器中
class Api::V1::SessionsController < Devise::SessionsController skip_before_action :authenticate_user! skip_before_action :verify_authenticity_token def create warden.authenticate!(:scope => :user) render :json => current_user end end
在路线
namespace :api, :defaults => { :format => 'json' } do namespace :v1 do resource :account, :only => :show devise_scope :user do post :sessions, :to => 'sessions#create' delete :session, :to => 'sessions#destroy' end end end
那么你可以做这样的事情(例子是使用HTTPie )
http -f POST localhost:3000/api/v1/sessions user[email]=user@email.com user[password]=passw0rd
响应头将在Set-Cookie头中有一个会话。 把这个值放在后面的请求中。
http localhost:3000/api/v1/restricted_things/1 'Cookie:_my_site_session=<sessionstring>; path=/; HttpOnly'