gpt4 book ai didi

ruby-on-rails - 扩展 Devise SessionsController 以使用 JSON 进行身份验证

转载 作者:数据小太阳 更新时间:2023-10-29 06:21:50 34 4
gpt4 key购买 nike

我正在尝试为 iPhone 应用构建一个 Rails API。 Devise 可以很好地通过 Web 界面登录,但我需要能够使用 REST API 创建和销毁 session ,我想使用 JSON 而不是必须在 session Controller 上执行 POST 并解析 HTML 并处理一个重定向。

我以为我可以做这样的事情:

class Api::V1::SessionsController < Devise::SessionsController  
def create
super
end
def destroy
super
end
end

我在 config/routes.rb 中添加了:

namespace :api do
namespace :v1 do
resources :sessions, :only => [:create, :destroy]
end
end

rake routes 显示路由设置正确:

   api_v1_sessions POST   /api/v1/sessions(.:format)     {:action=>"create", :controller=>"api/v1/sessions"}
api_v1_session DELETE /api/v1/sessions/:id(.:format) {:action=>"destroy", :controller=>"api/v1/sessions"}

当我 POST 到/user/sessions 时,一切正常。我得到了一些 HTML 和 302。

现在如果我 POST 到/api/v1/sessions 我会得到:

Unknown action AbstractController::ActionNotFound

curl -v -H 'Content-Type: application/json' -H 'Accept: application/json'   -X POST http://localhost:3000/api/v1/sessions   -d "{'user' : { 'login' : 'test', 'password' : 'foobar'}}"

最佳答案

这终于奏效了。

class Api::V1::SessionsController < Devise::SessionsController  
def create
respond_to do |format|
format.html { super }
format.json {
warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")
render :status => 200, :json => { :error => "Success" }
}
end
end
def destroy
super
end
end

同时更改 routes.rb,记住顺序很重要。

devise_for :users, :controllers => { :sessions => "api/v1/sessions" }
devise_scope :user do
namespace :api do
namespace :v1 do
resources :sessions, :only => [:create, :destroy]
end
end
end

resources :users

关于ruby-on-rails - 扩展 Devise SessionsController 以使用 JSON 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857855/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com