Rails 3.2 の典型的な mvc アプリを API + フロントエンド (バックボーン) のみに再構築したいと考えています。認証を含むレールでAPIを構築した経験がないため:
- バックボーンを使用してデバイスで認証する最良の方法は何ですか? auth_tokens を使用していますか?
- どうすれば彼をAPIにできますか? JSON を出力するだけですか、それとも Grape のような gem を使用しますか?
前もって感謝します!
Rails 3.2 の典型的な mvc アプリを API + フロントエンド (バックボーン) のみに再構築したいと考えています。認証を含むレールでAPIを構築した経験がないため:
前もって感謝します!
私がこれを行う方法を説明できます:
まず、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
幸運を。