4

Rails 3.2 の典型的な mvc アプリを API + フロントエンド (バックボーン) のみに再構築したいと考えています。認証を含むレールでAPIを構築した経験がないため:

  • バックボーンを使用してデバイスで認証する最良の方法は何ですか? auth_tokens を使用していますか?
  • どうすれば彼をAPIにできますか? JSON を出力するだけですか、それとも Grape のような gem を使用しますか?

前もって感謝します!

4

1 に答える 1

10

私がこれを行う方法を説明できます:

まず、devise で標準の 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 でこの URL にリクエストを送信します。

{ 
   user => {
      email => "myemail@toto.com",
      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

ご覧のとおり、次の各リクエストで、キーの html ヘッダーに access_token を追加します: HTTP_USER_ACCESS_TOKEN

したがって、ユーザーがリクエストを許可されているかどうかを確認できます。

API を作成するには、Rails API gem を次のように使用できます。

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

幸運を。

于 2012-06-05T08:29:05.700 に答える