2014-06-29 162 views
0

我使用ruby在rails上構建了一個簡單的REST API,允許用戶輕鬆創建帳戶。最近我試圖用API令牌來保護API。我一直在使用Google Chrome網上商店中的Advanced Rest Client來測試我的API。據我所知它,當我嘗試訪問的調用,我從我的REST客戶端測試應用程序得到一個消息,看起來像這樣的工作:Ruby on Rails - RESTful API身份驗證

enter image description here

問題是當我嘗試與成功驗證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令牌,但似乎無法獲得正確的語法。這裏是什麼,我已經嘗試了幾個例子:

enter image description here

,並

enter image description here

最後,

enter image description here

我在做什麼錯? API標記是否未存儲在HTTP標頭中?請幫忙!

回答

3

你的頭是不正確的,關鍵應該是Authorization

嘗試把這個作爲原標題:

Authorization: Token token=secret

+0

感謝你,似乎工作我不得不把祕密'「」 '最後一行是'Authorization:Token token =「secret」' – ScottOBot

+0

我想我將使用UDID作爲實際的密鑰。有沒有更安全的方法來做到這一點,沒有API密鑰硬編碼到我用於API的每個控制器?在rails中這樣的最佳做法是什麼? @Simon – ScottOBot

+0

@ScottOBot是的,我會使用類似'SecureRandom.hex'的方式爲每個用戶/帳戶生成一個令牌。這是一篇關於最佳實踐的好文章:http://blog.envylabs.com/post/75521798481/token-based-authentication-in-rails – sren