【问题标题】:Having trouble with IF user_signed in using Devise authentication on RAILS在 RAILS 上使用 Devise 身份验证时遇到 IF user_signed in 问题
【发布时间】:2015-10-23 10:19:01
【问题描述】:

我正在我的 Rails 网站上实施设计用户身份验证。一切正常。我的views、models、urls等都设置好了。用户可以注册、登录、注销。

我遇到的问题是这段代码:即使我登录了,它仍然在标题上显示“登录”作为选项以及“注册”。当用户通过身份验证时,我可以使用什么语法或代码使这两个 SPECIFIC 项目消失。下面的代码在我的_header.html.erb中

<div class="collapse navbar-collapse navbar-ex1-collapse">
<ul class="nav navbar-nav navbar-right">
  <li><%= link_to "Home", root_path %></li>
  <li><%= link_to "About", about_path %></li>
  <li><%= link_to "Login", new_user_session_path %></li> 
  <li><%= link_to "Signup", new_user_registration_path %></li>
  <% if user_signed_in? %>
    <li><%= link_to "Log out", destroy_user_session_path, method: :delete %></li>
    <% else %>
</ul>
<% end %>

【问题讨论】:

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


    【解决方案1】:

    您可以执行以下操作:

    <% if user_signed_in? %>
    <li><%= link_to "Log out", destroy_user_session_path, method: :delete %></li>
    <% else %>
    <li><%= link_to "Login", new_user_session_path %></li> 
    <li><%= link_to "Signup", new_user_registration_path %></li>
    <% end %>
    

    您只需要在else 部分写上"Login""Signup"

    【讨论】:

    • 这不起作用。它在标题上放置了第二次登录,并没有实现我需要做的事情。
    【解决方案2】:

    一切都很好,只需要在 else 块中包含登录/注册,这样如果用户登录,它就不会呈现。

      <% if user_signed_in? %>
        <li><%= link_to "Log out", destroy_user_session_path, method: :delete %></li>
      <% else %>
        <li><%= link_to "Login", new_user_session_path %></li> 
        <li><%= link_to "Signup", new_user_registration_path %></li>
      <% end %>
    

    【讨论】:

    • 嗨,这部分代码没问题。你重启你的服务器了吗?你检查过你渲染的部分是否正确吗?
    • 您仍然没有更改您发送的屏幕截图中的 else 块。
    【解决方案3】:

    这是我们使用的确切代码:

    <% if user_signed_in? %>
        <%= link_to " ", destroy_user_session_path, class: "ion-close", id: "logout", title: "Log Out", data: { placement: "bottom", confirm: "Really Logout?" }, method: :delete %>
    <% else %>
        <%= link_to "", new_user_session_path, class: "ion-locked login", title: "Login / Register", data: { placement: "bottom" }, rel: "modal" %>
    <% end %>
    

    不幸的是,它不是复制/粘贴(我们还有其他一些我们使用的东西),但它应该向您展示它应该如何工作。


    就您的错误而言,我建议您:

    1.输出

    只需在您的视图中输出&lt;%= user_signed_in? %&gt;

    这将向您显示它是否是 true/false - 让您确定您的条件逻辑可能无法正常工作的原因。

    我个人认为您的会话没有设置;这会显示出来。

    -

    2。重启

    第二件事是重启你的服务器。

    您可能有一些会话冲突,或另一组问题阻止应用保存您的身份验证状态。

    -

    3.会话

    最后,可能您的会话存在问题。

    我不知道具体情况,但 user_signed_in? 与您在登录等时看到的不同表明设置了多个会话,或者根本没有设置。

    无论哪种方式,您都可能希望删除所有浏览器缓存数据(如果需要,我可以更新有关如何执行此操作的说明)以根据需要重置会话。

    【讨论】:

    • 嗨,Rich,非常感谢您抽出宝贵时间写出如此全面的东西,我会尝试一下并回复。
    • 嘿 Rich,我没有使用 HAML。他们是一种正常编码的方法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 2018-04-25
    • 1970-01-01
    • 2017-03-26
    • 2018-01-27
    • 2011-05-07
    相关资源
    最近更新 更多