2011-09-16 236 views
3

我目前正在开发一个应用程序,除了通常的可视化Web应用程序goop外,还将公开一些RESTful API服务供外部应用程序使用。我正在使用Devise来管理用户身份验证,但我正在努力如何在给定输入的情况下“手动”验证用户身份。API的rails身份验证

我遇到的情况是,我希望API的用户无需登录屏幕等实际登录到可视化日志。我希望他们提交用户名和密码,然后进行身份验证并在其中签名我的API服务。

我知道您可以使用Devise提供的sign_in方法对用户进行签名,但似乎完全忽略了身份验证。这里是我想要做的更详细的解释:

假设在用户控制器中调用connect的GET路由。控制器完全取代设计注册控制器,但不是第一个会议。该URL我的服务是:

<server>/users/connect 

,并期望除了一些具体的和不重要的,以我的问题GOOP服务“电子邮件”,“密码”参数。

我想知道的是如何实现的东西,相当于以下伪代码:

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 

我一直无法找到在设计源的方法来做到这一点 - 它是如此的一般化很多方面,我可能只是想念它。

任何人有任何想法?我希望不要a)必须实现我自己的事情,并且b)不必离开Devise。它为我提供了非API服务...

谢谢!

我已经离开了个

回答

2

设计的token_authenticatable是去这样做的方式。我们已经多次成功地使用它来做基于api的登录。

在配置/初始化/ devise.rb

config.token_authentication_key = :nameofyourapikeyhere 

在user.rb:

devise … token_authenticatable, ... 

在上面,你能说出的API密钥东西,然后让您的路线/用户/ connect?apikey = whatever(以apikey为例)。在数据库中,它将是authentication_token,但它可以正常工作。

为了澄清,如果用户有一个authentication_token并且它是以params(或者它的别名 - 在上面的例子中是:apikey)发送的,他们将会登录。

+0

很酷,我会研究这个想法。谢谢:) – jaydel

+0

现在已经弃用了,任何人都知道如何使用新的实现来构建它? – halbano

+0

您应该使用https://github.com/lynndylanhurley/devise_token_auth进行基于标记的设计认证。 – plunntic