使用 sailsjs 护照的 public 页面中未定义用户

User not defined in public page with sailsjs passport

我已经使用 sails-generate-auth 向我的网站添加身份验证。身份验证工作正常:如果我未通过身份验证,我只能访问 public 个页面。

我的索引页面是 public,它的控制器策略设置为 true:

/config/policies.js
'*': ['passport', 'sessionAuth'],

'auth': {
   '*': ['passport']
},
'IndexController' : true

问题: 在我的布局中,我想显示登录按钮或用户名:

/views/layout.ejs
[....]
<% if ( user != undefined ){ %>
    <li><a href="/logout"><%= user.username %> <i class="fa fa-sign-out"></i></a></li> 
<% }else{ %>
    <li><a href="/login"></i>Login <i class="fa fa-sign-in"></i></a></li> 
<% } %>  
[...]

但是,我无法访问这些 public 页面上的 user 变量,我得到

user not defined

我设法仅在受限控制器中生成的视图上显示用户名(即访问 user 变量)。

====== 新的小问题:

登录页面定义了变量user,所以if语句为真,层中显示user.name。但是用户还没有登录,结果是 user.name 显示 "undefined":

我试过了:

<% if ((typeof user) != 'undefined' && (user.name != 'undefined')){ %>

但 "undefined" 仍显示在布局中。有了这个:

<% if ((typeof user) != 'undefined' && (typeof (user.name) != 'undefined')){ %>

该声明永远不会正确,"Login" 显示在每个页面上,即使在登录后也是如此。

知道如何进行吗?

您可以使用 if (user)if (typeof user === 'undefined')

<% if (user){ %>
  <li><a href="/logout"><%= user.username %> <i class="fa fa-sign-out"></i></a></li> 
<% }else{ %>
  <li><a href="/login"></i>Login <i class="fa fa-sign-in"></i></a></li> 
<% } %>

您必须对 IndexController 使用 通行证政策 。您将有权访问该用户,并且仍然可以在不登录的情况下查看该页面。

的确,the passport policy initialize passport and set the user variable in the response while the sessionAuth policy is controlling if the user is authenticated允许他访问控制器。