0
我使用ruby在rails上構建了一個簡單的REST API,允許用戶輕鬆創建帳戶。最近我試圖用API令牌來保護API。我一直在使用Google Chrome網上商店中的Advanced Rest Client
來測試我的API。據我所知它,當我嘗試訪問的調用,我從我的REST客戶端測試應用程序得到一個消息,看起來像這樣的工作:Ruby on Rails - RESTful API身份驗證
問題是當我嘗試與成功驗證Advanced Rest Client
。下面是我用它來創建令牌,並檢查是否用戶認證的控制器代碼:
class Api::UserController < ApplicationController
skip_before_filter :verify_authenticity_token
TOKEN = "secret"
before_action :authenticate
def index
@users = User.all
respond_to do |format|
format.json { render json: @users }
end
end
def create
@user = User.new()
@user.first_name = params[:first_name]
@user.last_name = params[:last_name]
@user.email = params[:email]
@user.password = params[:password]
respond_to do |format|
if @user.save
@response = {:status => "201", :message => "User successfully created."}
format.json { render json: @response, status: :created }
else
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
# private methods in the UserController class
private
def authenticate
authenticate_or_request_with_http_token do |token, options|
token == TOKEN
end
end
end
這是相當簡單,似乎是在做自己的工作,因爲我一直無法與Advanced Rest Client
認證。我試圖在HTTP頭文件中設置API令牌,但似乎無法獲得正確的語法。這裏是什麼,我已經嘗試了幾個例子:
,並
最後,
我在做什麼錯? API標記是否未存儲在HTTP標頭中?請幫忙!
感謝你,似乎工作我不得不把祕密'「」 '最後一行是'Authorization:Token token =「secret」' – ScottOBot
我想我將使用UDID作爲實際的密鑰。有沒有更安全的方法來做到這一點,沒有API密鑰硬編碼到我用於API的每個控制器?在rails中這樣的最佳做法是什麼? @Simon – ScottOBot
@ScottOBot是的,我會使用類似'SecureRandom.hex'的方式爲每個用戶/帳戶生成一個令牌。這是一篇關於最佳實踐的好文章:http://blog.envylabs.com/post/75521798481/token-based-authentication-in-rails – sren