Vietnam

    Nodejs.vn

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Popular
    • Tags
    • Groups
    • Search

    Hỏi về đăng nhập bằng ajax nodejs?

    ExpressJS/Conect.IO
    0
    7
    755
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Kha Pham
      Kha Pham last edited by

      Mình đang sử dụng passportJs và json web token sau khi đăng nhập xong server sẽ trả về 1 token và lưu ở localstore khi mà lần sau đăng nhập thì sẽ lấy token từ localstore gửi ajax lên server rồi server sẽ lữu vào session passportJs là đã đăng nhập nhưng khi mình thử thì f5 vài lần thì nó mới tự đăng nhập được. Giá trị trên server mình xem log thì passport đã có user.
      0_1529823536241_image.png

      exports.checkLoginAxios = (req, res, callback) => {
          var token = req.body.token;
          if (req.session.token || token) {
              if (!req.session.token) {
                  req.session.token = token;
              } else token = req.session.token;
              jwt.verify(req.session.token, config.secret, function (err, decoded) {
                  if (err) {
                      return res.send(false);
                  } else {
                      decoded = decoded.data;
                      // console.log(req.session) log phía trên
                      return res.json({
                          ten: decoded.ten,
                          quyen_hang: decoded.quyen_hang,
                          _id: decoded._id,
                          avatar:decoded.anh_dai_dien,
                          token: token
                      })
                  }
              });
          } else
              return res.send(false);
      }
      

      Sau khi gửi ajax để đăng nhập thì mình thử một thao tác yêu cầu phải đăng nhập mới được thực hiện và router và hàm kiểm tra đăng nhập của mình. Khoản 3 - 4 lần f5 đầu tiên sau khi mình khởi động lại node đều trả về là "Chưa Đăng Nhập" còn những lần sau thì nó mới cho thông qua.

      router.post('/comment/UpOrDown', kiem_tra_dang_nhap, jsonParser, C_Comment.upOrDown);
      function kiem_tra_dang_nhap(req, res, next) {
      if (req.isAuthenticated()) {
          return next();
        }
        else {
          return res.json({error: "Chưa đăng nhập"});
        }
      }
      

      Đam mê công nghệ
      Không biết nhiều nhưng cũng muốn đóng góp

      Nguyen Hien 1 Reply Last reply Reply Quote 0
      • Nguyen Hien
        Nguyen Hien @Kha Pham last edited by Nguyen Hien

        @Kha-Pham Bạn log cái này ở đoạn đầu hàm check xem:
        console.log(req.session.token, req.body.token, req.body.token == req.session.token)
        Với mình có mấy chỗ hơi khó hiểu:
        lấy token từ body -> kiểm tra sesion có không. Ưu tiên token trong session nếu có.
        Vậy thì bạn 1 là lưu token trong session luôn. Còn trả về thì chả cần lưu làm gì. Vì token fake thì sao validate đúng được.
        Nếu token bạn trả về rồi. Thì cách của bạn đang là stateless mà đúng k. Vậy thì hàm verify của bạn chỉ cần gọi jwt hay passport để validate đúng token từ req.body hay header token thôi.

        Mình nghĩ nếu được bạn thửu flow này xem:

        Step1 : Login/register -> success return jwt token + info user
        Step 2: Đinh token vào req.header.authorization  --> server get token from header -> validate = jwt -> Nếu sai throw hoạce return , nếu đúng -> get payload take user_id -> query db xem có user nào có id này ko -> sai return, đúng -> req.user = user (coi req như 1 context chứa) -> next(),
        

        Sent from Rodgers Zone!!!

        1 Reply Last reply Reply Quote 0
        • Kha Pham
          Kha Pham last edited by

          console.log(req.session.token, req.body.token, req.body.token == req.session.token)
          Mình không có check 2 cái token đó bằng nhau như vậy.
          Đầu tiên là gửi token lên server => kiểm tra token có trong session chưa nếu chưa thì gán token từ client vào session => tiếp theo check token có hộp lệ hay không => nếu hộp lệ trả về thông tin user lưu trong token cho passport

          Đam mê công nghệ
          Không biết nhiều nhưng cũng muốn đóng góp

          1 Reply Last reply Reply Quote 0
          • Kha Pham
            Kha Pham last edited by

            Ví dụ lần đầu tiên sau khi khởi động node lên thì không đăng nhập đc. F5 khoản vài lần thì nó mới nhận trạng thái đăng nhập.

            Đam mê công nghệ
            Không biết nhiều nhưng cũng muốn đóng góp

            Kha Pham 1 Reply Last reply Reply Quote 0
            • Kha Pham
              Kha Pham @Kha Pham last edited by

              Khi lưu session vào database bằng connect-mongo thì không cò bị lỗi nữa.

              Đam mê công nghệ
              Không biết nhiều nhưng cũng muốn đóng góp

              Nguyen Hien 1 Reply Last reply Reply Quote 0
              • Nguyen Hien
                Nguyen Hien @Kha Pham last edited by

                @Kha-Pham Mấy cái này thì chịu. Với nữa là bạn có cluster app k ?

                Sent from Rodgers Zone!!!

                Kha Pham 1 Reply Last reply Reply Quote 0
                • Kha Pham
                  Kha Pham @Nguyen Hien last edited by Kha Pham

                  @Nguyen-Hien không bạn. mình chỉ chạy và lập trình trên 1 máy laptop thôi. Với lại củng chưa tìm hiểu về cluster nữa

                  Đam mê công nghệ
                  Không biết nhiều nhưng cũng muốn đóng góp

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post
                  $(document).ready(function () { app.coldLoad(); }); }