2017-03-13 15 views
0

特定のリンク(「新規ブログ」)は自分自身(ユーザー名= "admin")であり、一般のユーザーではないことを確認します。私は次のif文を書いたが、エラーを投げている:特定のユーザーがPassportを使用してログインしているかどうかを確認する方法

 <% if(currentUser.username = "admin") { %> 
    <ul class="nav navbar-nav"> 
    <li class="active"><a href="/new"><i class="fa fa-plus" aria-hidden="true"></i> New Blog <span class="sr-only">(current)</span></a></li> 
    </ul> 
    <% } %> 

ここで私の論理に間違っていますか?

ルート以下の通りである:

router.get("/blogs", function(req, res){ 
Blog.find({}, function(err, blogs){ 
    if(err) { 
     console.log(err); 
    } else { 
     res.render("index", {blogs: blogs}); 
    } 
}); 
});  


router.get("/new", function(req, res){ 
res.render("new"); 
}); 


router.get("/blogs/:id", function(req, res){ 
Blog.findById(req.params.id, function(err, foundBlog){ 
    if(err){ 
     res.redirect("/blogs"); 
    } else { 
     res.render("show", {blog:foundBlog}); 
    } 
}); 
}); 

// create route 
router.post("/blogs", function(req, res){ 
req.body.blog.body = req.sanitize(req.body.blog.body); 
Blog.create(req.body.blog, function(err, newBlog){ 
    if(err) { 
     res.render("new"); 
    } else { 
     res.redirect("/blogs"); 
    } 
}); 
}); 

// edit route 
router.get("/blogs/:id/edit", function(req, res){ 
// find blog 
Blog.findById(req.params.id, function(err, foundBlog){ 
    if(err){ 
     res.redirect("/blogs"); 
    } else { 
     res.render("edit", {blog: foundBlog}); 
    } 
}); 
}); 

// update route 
router.put("/blogs/:id", function(req,res){ 
req.body.blog.body = req.sanitize(req.body.blog.body); 
Blog.findByIdAndUpdate(req.params.id, req.body.blog, function(err,  updatedBlog) { 
    if(err) { 
     res.redirect("/"); 
    } else { 
     res.redirect("/blogs/" + req.params.id); 
    } 
}); 
}); 

// delete route 
router.delete("/blogs/:id", function(req, res){ 
Blog.findByIdAndRemove(req.params.id, req.body.blog, function(err,  deleteBlog){ 
    if(err) { 
     res.redirect("/blogs"); 
    } else { 
     res.redirect("/blogs"); 
    } 
}); 
}); 

router.get("/", function(req, res){ 
res.redirect("/blogs"); 
}) 

// reg 
router.get("/register", function(req, res){ 
res.render("register"); 
}); 

// signup logic 
router.post("/register", function(req, res){ 
var newUser = new User({username: req.body.username, image:  req.body.image}); 
User.register(newUser, req.body.password, function(err, user){ 
if(err){ 
    res.redirect("/blogs"); 
} 
passport.authenticate("local")(req, res, function(){ 
    res.redirect("/blogs"); 
}); 
}); 
}); 

// login form 
router.get("/login", function(req, res){ 
res.render("login"); 
}); 


// login logic 
router.post("/login", passport.authenticate("local", { 
successRedirect: "/blogs", 
failureRedirect: "/login", 
})); 


// logout logic 
router.get("/logout", function(req, res){ 
req.logout(); 
req.flash("success", "You are now logged out"); 
res.redirect("/blogs"); 
}); 
+0

は、ルーター(app.get(内部、特にコントローラのコールバック、あなたのコードのより多くを表示することができます) 、app.put())? –

+0

はい、確かに、上のすべてのルートをアップロードしました – DaveB1

+0

そのトリックをしましたか? –

答えて

1

認証が成功した場合、パスポートエクスプレスルータ(req.user)の要求オブジェクトにユーザオブジェクトを付加します。これは、ローカル認証戦略のdone(null、user)によって実現されます。ユーザーオブジェクトを作成して、対応するユーザーが実際に管理者であるかどうかを確認することができます。

router.post("/blogs", function(req, res){ 
    req.body.blog.body = req.sanitize(req.body.blog.body); 
    Blog.create(req.body.blog, function(err, newBlog){ 
    if(err) { 
     res.render("new", { 
      // Ternary operator which checks if the user object is empty or not 
      currentUser: req.user ? req.user.currentUser: '', 
      // I hope currentUser is present in your Schema object 
     }); 
    } else { 
     res.redirect("/blogs"); 
    } 
}); 

そして、あなたはそれが正しいユーザであるかどうか、あなたのビューで確認することができます。

<% if(currentUser === "admin") { %> 
    <ul class="nav navbar-nav"> 
     <li class="active"><a href="/new"><i class="fa fa-plus" aria-hidden="true"></i> New Blog <span class="sr-only">(current)</span></a> </li> 
    </ul> 
<% } %> 
+0

ええと、悲しいことにノー。しかし、私はそれが正しく実装されていないためだと確信しています。 – DaveB1

+0

正確に@ DaveB1?それは長いプロジェクトであれば、あなたはそれをgithubに置くことができ、我々はそこからそれを続けていくでしょう。 –

+0

こんにちは、昨晩深夜の終わりにそれを理解しました!!私は一緒に行った:<%if(currentUser && currentUser.username === "admin"){%>これは正常に動作します。ありがとうたくさん – DaveB1

関連する問題