Ruby on Rails登录&注销问题

时间:2015-12-31 10:16:06

标签: ruby-on-rails ruby ruby-on-rails-4

我是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

请帮助我。

1 个答案:

答案 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

希望这能解决您的问题。

编辑: 修改会话密钥名称以匹配您的上下文。