gpt4 book ai didi

ruby-on-rails - 为一个模型设计多个路径

转载 作者:太空宇宙 更新时间:2023-11-03 18:04:06 26 4
gpt4 key购买 nike

我想有两条不同的设计路线:

  • localhost:3000/login - 标准设计验证
  • localhost:3000/api/login - 使用另一个非标准 Controller 的 api 调用授权 /api/sessions_controller

routes.rb

devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout' }  
namespace :api, defaults: { format: :json } do
devise_for :users,
path: '',
defaults: { format: :json },
path_names: {
sign_in: 'login',
sign_out: 'logout',
},
controllers: { sessions: 'api/sessions' }
end

铁路路线 | grep session

new_user_session         GET     /login(.:format)  devise/sessions#new
user_session POST /login(.:format) devise/sessions#create
destroy_user_session DELETE /logout(.:format) devise/sessions#destroy
new_api_user_session GET /api/login(.:format) api/sessions#new {:format=>:json}
api_user_session POST /api/login(.:format) api/sessions#create {:format=>:json}
destroy_api_user_session DELETE /api/logout(.:format) api/sessions#destroy {:format=>:json}

api/sessions_controller.rb

class Api::SessionsController < Devise::SessionsController
skip_before_action :verify_authenticity_token
skip_before_action :authenticate_user!

respond_to :json

private

def respond_with(resource, _opts = {})
render json: resource
end

def respond_to_on_destroy
head :no_content
end
end

该代码对我来说看起来不错,但是当我尝试使用身份验证凭据向我的 localhost:3000/api/login 发送 POST 请求时,它返回错误:

{"error":"You need to sign in or sign up before continuing."}

如果我注释掉我的默认设计路由并从 api 命名空间移动 api 路由,一切正常,请求后返回带有资源的 json:routes.rb

#devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout' }  
devise_for :users,
path: 'api',
defaults: { format: :json },
path_names: {
sign_in: 'login',
sign_out: 'logout',
},
controllers: { sessions: 'api/sessions' }

namespace :api, defaults: { format: :json } do
...
end

为什么会这样?我缺少什么?

最佳答案

在我的 route 有这个:

Rails.application.routes.draw do
devise_for :users,
path: '',
path_names: {
sign_in: 'login',
sign_out: 'logout'
}

namespace :api, defaults: { format: :json } do
namespace :users do
devise_scope :user do
post 'login', to: 'sessions#create', defaults: { format: :json }
end
end
end
end

rails routes 输出:

                                   Prefix Verb       URI Pattern                                              Controller#Action
new_user_session GET /login(.:format) devise/sessions#new
user_session POST /login(.:format) devise/sessions#create
destroy_user_session DELETE /logout(.:format) devise/sessions#destroy
api_v1_users_login POST /api/v1/users/login(.:format) api/v1/users/sessions#create {:format=>:json}

http://localhost:3000/api/v1/users/login 发出 POST 请求按预期工作现在访问 http://localhost:3000/login 重定向到默认的设计登录页面,并且登录正常工作。问题是您不能两次使用相同的 devise_for。您可以有 devise_for :usersdevise_for :admin_users 但不能两次相同,在本例中为 :users

关于ruby-on-rails - 为一个模型设计多个路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53493634/

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