【发布时间】:2019-12-24 01:56:04
【问题描述】:
我在 rails 控制器中有 signup 和 signin POST 路由。 signup 需要 email、password 和 password_confirmation。 signin 需要 email 和 password。
以下是路线的样子:
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 来检查参数(在本例中我正在检查 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>
您可以看到上述参数在另一个 [:auth] 参数哈希中返回了 email、password 和 password_confirmation 的重复项。但是,我没有在邮递员或浏览器中提供名为 [:auth] 的参数。
[:auth] 参数来自哪里? rails 会自动添加该参数吗?如果是,为什么?
如果上下文仍然不清楚,这里是 Github Repo: Link To Repo
【问题讨论】:
标签: ruby-on-rails ruby