2012-06-05 18 views
4

我想重建一個典型的rails 3.2 mvc應用程序到API +前端(Backbone)中。因爲我沒有經驗來構建包括真實感的導軌API:從Rails設計auth到backbone&api?

  • 什麼是使用主幹進行身份驗證的最佳方式?使用auth_tokens?
  • 我應該如何讓他API?只需打印出JSON或使用像葡萄這樣的寶石?

在此先感謝!

回答

10

我可以解釋你我這樣做的方法:

首先,我安裝與制定一個標準的Rails應用程序。在那之後,我創造我自己的會話控制器:

class SessionsController < ApplicationController 

    def authenticate 
    # this method logs you in and returns you a single_access_token token for authentication. 
    @user = User.find_for_authentication(:email => params[:user][:email]) 

    if @user && @user.valid_password?(params[:user][:password]) 
     render :json => {:user => {:email => @user.email, :id => @user.id, :firsname => @user.firstname, :lastname => @user.lastname, :team_id => @user.team_id, :singleAccessToken => @user.generate_access_token}} 
    else 
     render :json => {:errors => ["Nom d'utilisateur ou mot de passe invalide"]}, :status => 401 
    end 
    end 
end 

正如你所看到的,我將請求發送到這個網址與JSON看起來像:

{ 
    user => { 
     email => "[email protected]", 
     password => "monpass" 
    } 
} 

我的控制器返回我的JSON用戶數據,如果每件事情都很好,或者錯誤。在用戶的json上,我返回一個access_token用於下一個請求,以檢查用戶是否被允許請求。

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    protected 
    def user_access_token 
    request.headers["HTTP_X_USER_ACCESS_TOKEN"] || request.headers["HTTP_USER_ACCESS_TOKEN"] 
    end 

    def current_user 
    if token = user_access_token 
     @user ||= User.find_by_access_token(token) 
    end 
    end 

    def require_user 
    unless current_user 
     render :json => {:error => "Invalid Access Token"}, :status => 401 
    end 
    end 

    def require_owner 
    unless current_user && current_user == object.user 
     render :json => {:error => "Unauthorized"} 
    end 
    end 

end 

正如你可以看到,在每個下一個請求,我將添加的access_token在HTML頭在關鍵:我在我的應用程序控制器,使這個過濾器HTTP_USER_ACCESS_TOKEN

所以,我可以檢查用戶被允許提出請求。

進行API,你可以使用Rails的API創業板在這裏看到:

http://railscasts.com/episodes/348-the-rails-api-gem

好運。