用户未在带有sailsjs护照的公共页面中定义

时间:2015-07-27 15:17:59

标签: sails.js passport-local

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

我的索引页面是公开的,其控制器的策略设置为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> 
<% } %>  
[...]

但是,我无法在这些公开页面上访问用户变量,我得

user not defined

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

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

在登录页面上,定义了变量user,因此if语句为true,并且user.name显示在图层中。但是,用户尚未登录,结果是user.name显示&#34; undefined&#34;:

screen of the problem

我试过了:

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

但是&#34;未定义&#34;仍然在布局中显示。有了这个:

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

声明永远不变,&#34;登录&#34;即使在登录后,也会显示在每个页面上。

知道如何继续吗?

2 个答案:

答案 0 :(得分:3)

您必须将护照政策用于 IndexController 。您将有权访问该用户,并且仍然可以在不记录的情况下查看该页面。

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

答案 1 :(得分:2)

您可以使用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> 
<% } %>