gpt4 book ai didi

ruby-on-rails - 为什么 Rails 身份验证 Controller 路由会复制身份验证参数?

转载 作者:行者123 更新时间:2023-12-05 09:11:54 26 4
gpt4 key购买 nike

我有 signupsignin在 Rails Controller 中发布路由。 signup需要 email , passwordpassword_confirmation . signin需要 emailpassword .

这是路线的样子:

class Api::V1::AuthController < ApplicationController

def signup
binding.pry <-- inspect the params here
@user = User.create(user_credential_params)
if @user.valid?
@token = encode_token(:user_id => @user.id)
render json: { :user => @user, :jwt => @token }, :status => :created
else
render json: { :error => 'Failed to create user' }, :status => :not_acceptable
end
end

def signin
@user = User.find_by(:email => user_credential_params[:email])
# authenticate method comes from bcrypt
if @user && @user.authenticate(user_credential_params[:password])
@token = encode_token({ :user_id => @user.id })
render json: { :user => @user, :jwt => @token }, :status => :accepted
else
render json: { :error => 'Invalid credentials' }, :status => :unauthorized
end
end

private

def user_credential_params
params.permit(:email, :password, :password_confirmation)
end
end

routes.rb :

Rails.application.routes.draw do
namespace :api do
namespace :v1 do
post '/signup', to: 'auth#signup'
post '/signin', to: 'auth#signin'
end
end
end

如果我抛出 binding.pry在检查参数的任一 Controller 操作中(在此示例中我正在检查 signup ),我看到以下参数(通过 Postman 并在浏览器中使用 AXIOS):

[1] pry(#<Api::V1::AuthController>)> params

=> <ActionController::Parameters {"email"=>"joelhoelting@aol.com", "password"=>"password123", "password_confirmation"=>"password123", "controller"=>"api/v1/auth", "action"=>"signup", "auth"=>{"email"=>"joelhoelting@aol.com", "password"=>"password123", "password_confirmation"=>"password123"}} permitted: false>

您可以看到上述参数返回了 email 的重复项, passwordpassword_confirmation在另一个[:auth]参数哈希。但是,我没有提供名为 [:auth] 的参数在 postman 或浏览器中。

[:auth] 在哪里参数来自? Rails 会自动添加该参数吗?如果是,为什么?

如果上下文仍然不清楚,这里是 Github Repo: Link To Repo

最佳答案

是的,Ruby on Rails 自动 wraps parameters当发送到服务器的 JSON 未指定任何根元素时使用当前 Controller 名称。

您可以在 config/initializers/wrap_parameters.rb 中重新配置此行为.

关于ruby-on-rails - 为什么 Rails 身份验证 Controller 路由会复制身份验证参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59463030/

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