0

我遇到了与登录和注销链接相关的问题。

我没有使用设计宝石

在我的代码中,我提供了以下链接

<% if current_user %>
  <li><%= link_to 'Logout',{:controller=>'sessions', :action=> 'destroy'}%></li>
<% else %>
  <li> <%= link_to 'Signup',{:controller =>'users', :action => 'new'} %> </li>
  <li> <%= link_to 'Login,{:controller =>'sessions', :action => 'new'} %> </li>
<% end %>

我正在使用 wicked gem,它也有以下步骤:

include Wicked::Wizard
steps :business, :login, :payment

如果用户在 users_controller 中输入新方法的 form_for 值并提交,则用户进入下一步,但上面显示的链接是“注销”,即用户在注册前已登录。

该怎么办?

请,任何给出的解决方案表示赞赏

users_controller.rb:

 def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      @user.update_attributes(user_params )
      session[:user_id]= @user.id
      redirect_to user_steps_path
    else
      render :new
    end
  end

  private
  def user_params
    params.require(:user).permit( :fname, :lname, :email, :mob, :gender, :country, :state, :suburb, :postal ,:add)
  end
end

user_steps_controller.rb

include Wicked::Wizard
  steps :business, :login, :payment

  def show
    @user = current_user
    render_wizard
  end

  def update
    @user = current_user
    params[:user][:current_step] = step
    session[:user_id]= @user.id
    @user.update_attributes(user_params )
    render_wizard @user
  end

  private
  def redirect_to_finish_wizard(options = nil)
    redirect_to root_url
  end

  def user_params
    params.require(:user).permit( :current_step,:cmpyname, :abnacn, :cmpyadd, :cmpydet,:cash, :paypal,:bsb,:usrname,:password, :password_confirmation, :selcat, :protit, :prodes)
  end
end

类 ApplicationController < ActionController::Base

  protect_from_forgery with: :exception
  helper_method :current_user


  private
  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

end
4

3 回答 3

0

您需要在创建后注销用户,您可以执行以下操作

if resource.save
  sign_out resource # resource = @user

如果您使用的是设计,您可能需要为此覆盖设计注册控制器!

编辑:

在您的create操作中,您正在为新创建的用户设置会话,请从您的create操作中删除此行

 session[:user_id]= @user.id

希望这可以帮助!

于 2015-05-28T10:32:23.487 回答
0

而不是检查 current_user 你应该检查<% if session[:user_id].present? %>

它可能会解决您的问题

于 2015-05-28T11:07:40.497 回答
0

如果用户已登录以显示您的步骤表单,只需检查您的视图:

<% if user_signed_in?%>
instead of 
<% if current_user%>
于 2015-05-28T11:11:25.093 回答