我已经使用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;:
我试过了:
<% if ((typeof user) != 'undefined' && (user.name != 'undefined')){ %>
但是&#34;未定义&#34;仍然在布局中显示。有了这个:
<% if ((typeof user) != 'undefined' && (typeof (user.name) != 'undefined')){ %>
声明永远不变,&#34;登录&#34;即使在登录后,也会显示在每个页面上。
知道如何继续吗?
答案 0 :(得分:3)
您必须将护照政策用于 IndexController 。您将有权访问该用户,并且仍然可以在不记录的情况下查看该页面。
确实,the passport policy initialize passport and set the user variable in the response而the 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>
<% } %>