我是新手Rails 4开发人员,需要一些帮助,使用rest-client为我的简单应用程序添加API。为简化起见,我将仅询问API的身份验证系统。
我有一个简单的应用程序,它使用Devise gem进行身份验证。我希望每个创建帐户的用户都有一个日历用于安排和预订。为了实现这一点,我使用了一个名为timekit(http://timekit.io/)的API。他们的身份验证系统响应以下cURL代码示例:
curl -X POST \
-H 'Timekit-App: docs' \
-d '{
"email": "doc.brown@timekit.io",
"password": "DeLorean"
}' \
https://api.timekit.io/v2/auth
然后返回以下JSON:
{
"data": {
"activated": true,
"email": "doc.brown@timekit.io",
"first_name": "Dr. Emmett",
"img": "http://www.gravatar.com/avatar/7a613e5348d63476276935025",
"last_name": "Brown",
"last_sync": null,
"name": "Dr. Emmett Brown",
"timezone": "America/Los_Angeles",
"token": "UZpl3v3PTP1PRwqIrU0DSVpbJkNKl5gN",
"token_generated_at": null,
"api_token": "FluxCapacitator", // note that this is usually a randomized string and not an actual word
}
}
所以现在我的问题如下: 1)在Rails框架中我实现了这个吗? 2)如何使用rest-client而不是cURL? 3)如何将其与Devise集成? 4)有什么好的资源可以增强我对我在这里做的事情的理解?
答案 0 :(得分:2)
很高兴看到你使用Timekit(我是核心开发者之一):)
我们目前没有ruby gem而且我不是Ruby开发人员,但这里有一个快速的代码示例,介绍如何使用HTTParty库完成此任务:
# Global configs for "admin" user
TK_ADMIN_USER = 'my-email@gmail.com'
TK_ADMIN_TOKEN = '12345ABCD'
# Example usage:
# timekit = Timekit.new(TK_ADMIN_USER, TK_ADMIN_TOKEN)
# tk_user = timekit.create_user(account)
# someInternalUser.update(tk_token: tk_user.token)
class Timekit
include HTTParty
base_uri 'https://api.timekit.io'
headers 'Timekit-App' => 'your-app-name'
def initialize(user, password)
@auth = {username: user, password: password}
end
def create_user(account)
options = {
body: {
"email" => account.email,
"first_name" => account.first_name,
"last_name" => account.last_name,
"timezone" => "America/Los_Angeles"
}.to_json,
basic_auth: @auth,
}
self.class.post('/v2/users/', options)
end
def create_calendar(account)
options = {
body: {
name: "Bookings",
description: "Hold bookings for clients."
}.to_json,
basic_auth: @auth
}
self.class.post('/v2/calendars', options)
end
end
https://gist.github.com/laander/83cb7f5dde1f933173c7
通常,我们的想法是通过我们的API创建用户(您可以在用户注册入门时透明地执行此操作),然后保存API返回的API令牌。之后,您可以执行模拟该用户的API调用(获取日历,创建事件,查询可用性等)
如果您需要更多动手帮助,请在timekit.io上的聊天中写信给我们!
答案 1 :(得分:1)
您可以考虑创建一个小型库,以便在项目的/lib
目录中包装与Timekit Web API的交互。我没有看到这个Web API的gem,因此您可以考虑将此逻辑提取为一个,以便社区可以从中受益。
rest-client宝石看起来很容易使用:
auth_hash = {
"email" => "doc.brown@timekit.io",
"password" => "DeLorean"
}
RestClient.post "https://api.timekit.io/v2/auth", auth_hash.to_json, content_type: :json, accept: :json
如果要为每个用户创建新的Timekit帐户,您可以考虑将凭据添加到User
模型或存储凭据的其他相关模型。