我有這樣的路線:如何識別用戶會話? Rails的
Rails.application.routes.draw do
root 'login#new'
get '/home/inicio', to: 'home#index'
scope '/login' do
get '/acesso', to:'login#new'
post '/acessorecebendo', to:'login#create', as:'user'
get '/sair', to:'login#destroy'
end
resources :login
resources :home
resources :produtos
resources :fornecedors
end
登錄控制器:
class LoginController < ApplicationController
protect_from_forgery
def new
if session[:user]
@user = User.find(session[:user])
end
end
def destroy
reset_session
redirect_to "/login/acesso", notice: "Você foi deslogado"
end
def create
user = User.validate(login_params[:email], login_params[:senha])
if user
session[:user] = user.id
redirect_to "/home/inicio", notice: "login feito com sucesso"
else
redirect_to "/login/acesso", notice: "Dados incorretos"
end
end
private
def login_params
params.require(:login).permit(:email, :senha)
end
end
家庭控制器:
class HomeController < ApplicationController protect_from_forgery with: :exception
def new
@user = User.find_by(id: session[:user]) end
def index
@produtos = Produto.all
render 'inicio' end
def show
if session[:user]
@user = User.find(session[:user])
end end end
我得到的主頁視圖錯誤(新。 html.erb):
<header>
<h2><a href="#">Bem-vindo <%= @user.nome %></a></h2>
<nav>
未定義的方法`諾姆」的零:NilClass
爲什麼我有一些問題的會議?我可以做登錄,我想在重定向頁面上看到此會話的用戶信息,就像我可以將登錄操作上分配的@user變量傳遞給家庭控制器以使用它一樣。
再次問候。這是什麼??? '@user = @user = User.find(session [:user])'。另外,您需要一個'new'操作來設置用戶。 – jvillian
哦,這是一個錯誤,當我發短信的這個職位... 我的老師是可怕的:\\ 但你的意思是一個新的行動?我已更新該帖子。 –
您的身份驗證方法存在嚴重缺陷 - 您只是將用戶的ID存儲在會話Cookie中?您應該使用每次用戶登錄或註銷時都會重置的令牌。有了這個方法,有人冒充其他用戶真的很微不足道,而會話令牌可以被重複使用很多時間... 這就是說。我們可以看到'User :: validate'的代碼嗎? – OneNeptune