【发布时间】:2018-06-19 01:48:06
【问题描述】:
我正在开发一个具有身份验证的 Rails 应用程序,并且收到一条错误消息:
没有路由匹配 {:action=>"destroy", :controller=>"session"},缺少必需的键:[:id]
我在尝试从会话控制器呈现“新”视图时遇到此错误,并且无法弄清楚为什么它应该只查看 New/Create 方法时引用 destroy 方法。以下是我如何设置路线、控制器、模型和视图,如果有人可以就我需要检查的内容给我一些指导,将不胜感激。
路线:
Rails.application.routes.draw do
root to: "root#index"
resources :users, only: [:new, :create, :index, :show]
resources :session, only: [:new, :create, :destroy]
resources :pets
end
型号:
class User < ApplicationRecord
PASSWORD_LENGTH = (6..25)
USERNAME_LENGTH = (5..25)
validates_presence_of :username
validates :username, length: USERNAME_LENGTH, uniqueness: true
validates :password, length: PASSWORD_LENGTH, allow_nil: true
has_many :pets
attr_reader :password
def self.find_from_credentials(username, password)
user = find_by(username: username)
return nil unless user
user if user.is_password?(password)
end
def is_password?(password_attempt)
BCrypt::Password.new(password_digest).is_password?(password_attempt)
end
def password=(password)
@password = password
self.password_digest = BCrypt::Password.create(password)
end
end
控制器:
class SessionController < ApplicationController
before_action :ensure_signed_out, only: [:new, :create]
def new
@user = User.new
end
def create
username = user_params[:username]
password = user_params[:password]
user = User.find_from_credentials(username, password)
if user
sign_in(user)
flash[:notice] = "#{username} has successfully signed in."
redirect_to "/"
else
flash[:error] = "User not found."
@user = User.new(username: username)
render :new
end
end
def destroy
sign_out
flash[:notice] = "User signed out."
redirect_to new_session_path
end
private
def user_params
params.require(:user).permit(:username, :password)
end
end
查看:
<h2>Enter your credentials below: </h2>
<%= form_for :user, url: session_path do |f| %>
<%= f.text_field :username, placeholder: 'Username', required: true %>
<%= f.password_field :password, placeholder: 'Password', required: true %>
<%= submit_tag 'Log in' %>
<% end %>
<p> Don't have an account? <%= link_to 'Sign up here!', new_user_path %></p>
【问题讨论】:
标签: ruby-on-rails session authentication