Ruby on rails “如何拥有”;当前用户;(编码为'session[:user_id]`)显示用户电子邮件,而不是一些奇怪的代码?
我遵循了关于Rails表单(登录、注销)的教程。除了这一点,一切都进行得很顺利:一旦用户登录,页面底部应该说“You is loggin as”,然后是一个电子邮件地址,例如,它会说“You is loggin as”Jane@aol.com". 负责此操作的代码行:Ruby on rails “如何拥有”;当前用户;(编码为'session[:user_id]`)显示用户电子邮件,而不是一些奇怪的代码?,ruby-on-rails,forms-authentication,Ruby On Rails,Forms Authentication,我遵循了关于Rails表单(登录、注销)的教程。除了这一点,一切都进行得很顺利:一旦用户登录,页面底部应该说“You is loggin as”,然后是一个电子邮件地址,例如,它会说“You is loggin as”Jane@aol.com". 负责此操作的代码行: 您的登录身份为: 但是,我得到的是您的登录身份为:#(不是一份完全相同的副本) 就我的一生而言,我不知道这个数字是多少,也不知道为什么用户的电子邮件没有显示,也不知道从哪里开始排除故障: 当前用户在ApplicationContr
您的登录身份为:
但是,我得到的是您的登录身份为:#
(不是一份完全相同的副本)
就我的一生而言,我不知道这个数字是多少,也不知道为什么用户的电子邮件没有显示,也不知道从哪里开始排除故障:
当前用户
在ApplicationController中定义:
class ApplicationController
def身份验证\u必需
如果!你登录了吗?
重定向到登录路径
结束
结束
def是否已登录?
!!当前用户
结束
def当前用户
@当前用户| |=开始
如果会话[:User\u id],则查找(会话[:User\u id])
结束
结束
助手\u方法:当前\u用户
结束
用户id
应该是用户的电子邮件。我错过了什么?只要将您的登录名改为:
,您的登录名为:。您当前看到的#
只是用户对象本身的表示 只需将您的登录名:
更改为您的登录名:
。您当前看到的#
只是用户对象本身的表示 您应该指定希望从当前用户获得的内容,如下所示:
<p>You are logged in as: <%= @current_user.email %></p>
您以以下身份登录:
如果不指定,Rails只会抛出当前用户是什么。您应该指定希望当前用户是什么,如下所示:
<p>You are logged in as: <%= @current_user.email %></p>
您以以下身份登录:
如果您不指定,Rails将抛出当前用户是什么。首先,您的一些代码似乎是错误的
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authentication_required
def authentication_required
redirect_to login_path if !logged_in?
end
def logged_in?
current_user.present?
end
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
end
class ApplicationController
您正在创建一个助手方法,因此不需要调用@current\u user
,只需调用current\u user
另外,会话[:user\u id]
不是电子邮件。它是ID。您正在使用它查找具有user.find(会话[:user\u ID])
的用户。这与User.find(1)
相同
#
是对您分配给@current_user
的用户对象的引用,数字是内存中存储该对象的空间
您只需调用要为登录用户显示的方法。如果email
那么email
如果username
那么username
等等,首先你的一些代码似乎是错误的
class ApplicationController < ActionController::Base
protect_from_forgery with: :exception
before_action :authentication_required
def authentication_required
redirect_to login_path if !logged_in?
end
def logged_in?
current_user.present?
end
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user
end
class ApplicationController
您正在创建一个助手方法,因此不需要调用@current\u user
,只需调用current\u user
另外,会话[:user\u id]
不是电子邮件。它是ID。您正在使用它查找具有user.find(会话[:user\u ID])
的用户。这与User.find(1)
相同
#
是对您分配给@current_user
的用户对象的引用,数字是内存中存储该对象的空间
您只需调用要为登录用户显示的方法。如果电子邮件
那么电子邮件
如果用户名
那么用户名
等等谢谢!我试图找出当前用户的问题的原因是:教程演示了安全登录/注销以及如何保持某些信息的私密性(或防止黑客攻击)-因此,当前用户是而不是user.email
(老实说,我还没有学到足够的知识来理解这一切)。本教程将显示登录用户的电子邮件。无论如何,该电子邮件将仅显示给登录用户,因为所需的before_操作:authentication_将重定向任何未登录的用户。谢谢!我试图找出当前用户的问题的原因是:教程演示了安全登录/注销以及如何保持某些信息的私密性(或防止黑客攻击)-因此,当前用户是而不是user.email
(老实说,我还没有学到足够的知识来理解这一切)。本教程将显示登录用户的电子邮件。无论如何,该电子邮件将仅显示给登录用户,因为所需的before_操作:authentication_将重定向未登录的任何用户。