0

在我的项目设计中,为管理面板提供用户注册/身份验证。我需要添加 API 方法,它将登录用户并返回带有状态 + 会话 cookie 的 JSON。

路线.rb

devise_for :user, :controllers => {sessions: 'sessions'}

会话控制器

class SessionsController < Devise::SessionsController
  skip_before_filter :verify_authenticity_token

  def create
    resource = warden.authenticate!(:scrope => resource_name, :recall => "#{controller_path}#failure")
    sign_in(resource_name, resource)

    respond_to do |format|
      format.html { respond_with resource, :location => after_sign_in_path_for(resource) }
      format.json { render json: {:success => 1}}
    end
  end

如果我将数据发布到 user/sign_in.json,它将呈现 {"success": 1} 这正是我需要的。

但问题是如何将 user/sign_in.json 移动到一些自定义 url 上,例如 /api/sign_in ?

4

2 回答 2

0

在命名空间中包围路由:

namespace :api do
  devise_for :user, :controllers => {sessions: 'sessions'}
end
于 2013-05-07T20:31:54.270 回答
0

是不是这样:

api_controller.rb

def create_session
    resource = User.find_for_database_authentication(:email => params[:user][:email])

    if resource.nil?
      render :json=> {:success => 0, :error => "No Such User"}, :status=>401
    else
      if resource.valid_password?(params[:user][:password])
        sign_in(:user, resource)
        render :json=> {:success => 1}
      else
        render :json=> {:success => 0, :error => "Wrong Password"}, :status=>401
      end
    end 
  end

路线.rb

namespace :api do
    namespace :v1 do
      get :sign_in, :to => 'api#create_session'
    end
  end
于 2013-05-09T10:21:48.180 回答