使用 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允许他访问控制器。
我已经使用 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允许他访问控制器。