2014-07-06 21 views
9

Tôi đang xây dựng một ứng dụng Phonegap có các nút bấm ở phía máy chủ. Tôi muốn thực hiện đăng nhập bằng cách sử dụng chiến lược hộ chiếu-facebook nhưng callbacks của họ chỉ định hai tuyến đường,/successcallback và/failurecallback. Có một ứng dụng trang duy nhất, điều này làm cho nó rất khó hiểu để người dùng chuyển hướng đến trang và như vậy.Cách sử dụng đăng nhập Passport-Facebook mà không cần chuyển hướng?

Tôi không muốn phân phối các tệp tĩnh (index.html, login.html) từ máy chủ mà có chúng trên máy khách và yêu cầu khách hàng thực hiện cuộc gọi ajax. Cho đến nay, tôi có thể thực hiện/auth/facebook gọi như là một yêu cầu AJAX nhưng tôi không thể nhận được bất kỳ phản ứng nào trên cùng một yêu cầu vì chiến lược đăng nhập yêu cầu người dùng phải được chuyển hướng. Tôi muốn gửi một user_id hoặc tên lại cho người dùng khi đăng nhập thành công hoặc hiển thị cho anh ta biểu mẫu đăng nhập (cũng nằm trong thư mục www trong phonegap) về lỗi. Nhưng lỗi chuyển hướng và CORS đang ngăn cản tôi thực hiện việc này. Có cách nào tôi có thể thực hiện điều này? Tôi đã tìm kiếm điều này từ một vài tuần nay, nhưng không thành công. Tôi thực sự đánh giá cao sự giúp đỡ của bạn!

PS: Tôi muốn tránh phải gửi tất cả nội dung html và tĩnh từ máy chủ nút.

EDIT: Thêm mã đăng nhập để hiểu rõ hơn:

app.get('/userpage', utility.isLoggedIn, function(req, res) 
{ 
    res.send('User:'+req.user); 
}); 

app.get('/', utility.isLoggedIn, function(req, res) 
{ 
    res.redirect('/userpage'); 
}); 

app.get('/auth/facebook', passport.authenticate('facebook')); 

app.get('/auth/facebook/callback',passport.authenticate('facebook', 
{ 
    successRedirect : '/', 
    failureRedirect : '/login' 
})); 

app.get('/logout', function(req, res) 
{ 
    req.logout(); 
    res.redirect('/login'); 
}); 


utility.isLoggedIn: 
function isLoggedIn(req, res, next) 
{ 
    if (req.isAuthenticated()) 
    return next(); 

    res.redirect('/login'); 
} 
+1

Giải quyết sự cố này? Im quan tâm đến một cách tiếp cận tương tự ... –

+0

Người dùng sẽ phê duyệt các quyền mà ứng dụng Facebook của bạn yêu cầu thông qua yêu cầu ajax như thế nào? Điều gì sẽ xảy ra nếu người dùng chưa đăng nhập vào Facebook, họ sẽ đăng nhập như thế nào thông qua yêu cầu ajax? Câu trả lời cho những câu hỏi này tất nhiên là: họ không thể. Và đây là lý do tại sao bạn sẽ không bao giờ có thể xác thực người dùng thông qua bất kỳ nhà cung cấp OAuth nào bằng ajax. – idbehold

Trả lời

0

Thay vì sử dụng chuyển hướng tiêu chuẩn được cung cấp bởi hộ chiếu, bạn có thể xác định chức năng của riêng bạn mà sẽ được thực hiện thay vì chuyển hướng. Dưới đây là một ví dụ về những gì mã mà sẽ trông như thế

passport.authenticate('login', function(err, user, info) { 
     if (err) { return next(err); } 
     if (!user) { return res.json({ status:"failed", "error": "Invalid credentials" }); } 

// req/res held in closure 
     req.logIn(user, function(err) { 
      if (err) { return next(err); } 

      return res.json({ "status":"success"}); 
     }) 
})(req, res, next); 
0

Bạn không thể làm điều đó với facebook OAuth, nhưng Facebook cung cấp another login solution nơi bạn có thể mã hóa ứng dụng khách hàng của bạn để yêu cầu một mã thông báo, mà sau này bạn có thể xác nhận trên máy chủ với passport-facebook-token.

Bằng cách này bạn có thể sử dụng những lợi thế của hộ chiếu cho các phiên liên tục, mà không có chuyển hướng gây phiền nhiễu đó.

Các vấn đề liên quan