我是ruby on rails应用程序的新手,从最近几天开始,我正在为 params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT,
// WindowManager.LayoutParams.TYPE_SYSTEM_ALERT |
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED,
PixelFormat.RGBA_8888);
& Login
问题,现在我已经达成了解决方案,但现在又创建了一个新问题。当我提供无效密码然后显示
无效的电子邮件/密码组合
当我提供有效密码时,它会显示Logout
。
但是在登录逻辑之后没有工作。
这是我的sessions_controller:
Logged In
这是我的模特:
def new
end
def create
user = Jobseeker.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
redirect_to home_path
flash[:notice] = 'Logged In'
else
# Create an error message.
flash[:notice] = 'Invalid email/password combination'
render 'new'
end
end
def destroy
log_out
redirect_to home_path
end
这是我的观点:
before_save { email.downcase! }
validates :first_name, :presence => true, :length => { :in => 3..20 }
validates :last_name, :presence => true, :length => { :in => 3..20 }
validates :email, :presence => true, :uniqueness => true, format: { with: /\A[^@\s]+@([^@.\s]+\.)+[^@.\s]+\z/ }
has_secure_password
validates :password, presence: true, length: { minimum: 6 }
这是我的sessions_helper:
<%= form_for(:session, url: login_path) do |f| %>
<%= f.email_field :email %>
<%= f.password_field :password%>
<%= f.submit "Log in" %>
<% end %>
这是我的application_controller:
# Logs in the given user.
def log_in(user)
session[:user_id] = user.id
end
# Returns the current logged-in user (if any).
def current_user
@current_user ||= Jobseeker.find_by(jobseeker_id: session[:user_id])
end
# Returns true if the user is logged in, false otherwise.
def logged_in?
!current_user.nil?
end
# Logs out the current user.
def log_out
session.delete(:user_id)
@current_user = nil
end
这是我的布局:
protect_from_forgery with: :exception
include SessionsHelper
如何解决此问题?
我正在使用<% if logged_in? %>
<%= link_to "Profile", current_user.first_name %>
<%= link_to "Log out", logout_path, method: :delete %>
<% else %>
<li><%= link_to "Login", login_path %></li>
<% end %>
ruby 1.9.7
&amp; Rails 4.2.5
请帮助我。
答案 0 :(得分:1)
在你的create方法中,你没有设置会标记&#34;登录&#34;当用户跨页面移动时的状态。
session_helper.rb中的"current_user"
使用session[:user_id]
,当前用户应为user_id
,由您在登录后设置。
所以,您应该在session[:user_id] = user.id
方法create
上设置session_controller.rb
。
您修改过的session_controller #create应该是,
def create
user = Jobseeker.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
login(user)
flash[:notice] = 'Logged In'
redirect_to home_path
else
# Create an error message.
flash[:notice] = 'Invalid email/password combination'
render 'new'
end
end
希望这能解决您的问题。
编辑: 修改会话密钥名称以匹配您的上下文。