Javascript 登录后在express部分中显示用户名
所以,我一直在寻找一个解决方案,现在没有任何工作,我的问题 所以我有一个主页(“/”),一个配置文件页面(“/profile”)和一个登录/注册页面。我正在使用passport与本地、twitter和谷歌进行帐户访问。我想做的是在导航栏中显示用户名和个人资料图片,无论他们在网站上的任何位置 这是部分的外观: 分部/_nav.hbsJavascript 登录后在express部分中显示用户名,javascript,node.js,handlebars.js,passport.js,express-handlebars,Javascript,Node.js,Handlebars.js,Passport.js,Express Handlebars,所以,我一直在寻找一个解决方案,现在没有任何工作,我的问题 所以我有一个主页(“/”),一个配置文件页面(“/profile”)和一个登录/注册页面。我正在使用passport与本地、twitter和谷歌进行帐户访问。我想做的是在导航栏中显示用户名和个人资料图片,无论他们在网站上的任何位置 这是部分的外观: 分部/_nav.hbs {{#if isAuthenticated}} <div class="dropdown">
{{#if isAuthenticated}}
<div class="dropdown">
<button type="button" class="btn btn-primary dropdown-toggle dropdown-button"
data-toggle="dropdown">
<img class="user-avatar" src="{{image}}" alt="{{username}}'s' avatar">{{username}}
</button>
<div class="dropdown-menu">
<a class="dropdown-item user-dropdown" href="/profile">My Profile</a>
<a class="dropdown-item user-dropdown" href="#">User Settings</a>
<a class="dropdown-item user-dropdown" href="/logout">Logout</a>
</div>
</div>
{{else}}
<a href="/register" class="account-button text-nowrap">Register/Login
</a>
{{/if}}
module.exports = {
ensureAuth: function (req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
},
};
我已经尝试通过传递req.user对象,然后在我的partial中执行user.username来解决这个问题
我是个新手,但我认为问题可能是当我注销时,用户名不再存在,这就是为什么它会出现错误。但是如果是这种情况,它应该显示我的部分中的登录/注册按钮
请注意,我在我的server.js中注册了isAuthenticated作为一个局部变量,如果需要,这是我的ensureAuth代码:
中间件/auth.js
{{#if isAuthenticated}}
<div class="dropdown">
<button type="button" class="btn btn-primary dropdown-toggle dropdown-button"
data-toggle="dropdown">
<img class="user-avatar" src="{{image}}" alt="{{username}}'s' avatar">{{username}}
</button>
<div class="dropdown-menu">
<a class="dropdown-item user-dropdown" href="/profile">My Profile</a>
<a class="dropdown-item user-dropdown" href="#">User Settings</a>
<a class="dropdown-item user-dropdown" href="/logout">Logout</a>
</div>
</div>
{{else}}
<a href="/register" class="account-button text-nowrap">Register/Login
</a>
{{/if}}
module.exports = {
ensureAuth: function (req, res, next) {
if (req.isAuthenticated()) {
return next();
}
res.redirect('/login');
},
};
所以我找到了解决办法。在我的回答中,我传递了req.user.username,但没有检查它是否确实存在。所以我在reddit上提问,有人帮我找到了这个答案:
const { user: { username, image } = {} } = req;
它的作用是分解用户对象,或者返回用户名和图像,或者什么都不返回({})
get请求如下所示:
router.get('/', (req, res) => {
const { user: { username, image } = {} } = req;
res.render('index', {
username,
image,
});
});
你能提供用户注销的代码吗?我感谢你的帮助,但我已经解决了!我现在就把答案贴在这里。