2015-06-11 19 views
10

Tôi đang phát triển API có vòng lặp và hộ chiếu. Tôi đã nhìn thấy ví dụ này, đó là khá tốt:Lặp lại hộ chiếu di động đăng nhập

https://github.com/strongloop/loopback-example-passport

Trong tài liệu hướng dẫn, họ nói loopback sau bước này để xác thực người dùng thông qua các nhà cung cấp bên thứ ba:

  1. Một yêu cầu người truy cập để đăng nhập sử dụng Facebook bằng cách nhấp vào liên kết hoặc nút được LoopBack hỗ trợ để bắt đầu ủy quyền oAuth 2.0.
  2. loopback chuyển hướng trình duyệt để cho phép thiết bị đầu cuối Facebook để người dùng có thể đăng nhập vào Facebook và cấp quyền để loopback
  3. Facebook chuyển hướng trình duyệt tới một URL gọi lại được tổ chức bởi loopback với mã uỷ quyền OAuth 2.0
  4. làm cho loopback một yêu cầu đến thiết bị đầu cuối thẻ Facebook để có được một thẻ truy cập sử dụng mã uỷ quyền
  5. loopback sử dụng thẻ truy cập để lấy của người dùng Facebook hồ sơ
  6. loopback các tìm kiếm các UserIdent mô hình ity bởi (provider, externalId) để xem có một người dùng LoopBack hiện tại cho id Facebook đã cho Nếu có, hãy đặt người dùng LoopBack về ngữ cảnh hiện tại Nếu không, hãy tạo người dùng LoopBack từ hồ sơ và tạo bản ghi tương ứng trong UserIdentity để theo dõi thông tin đăng nhập của bên thứ ba. Đặt người dùng mới được tạo thành ngữ cảnh hiện tại.

Vì vậy, câu hỏi của tôi là, giả sử một số người dùng nhận mã thông báo truy cập bằng ứng dụng dành cho thiết bị di động, làm cách nào để xác thực yêu cầu của người dùng đó bằng Loopback Passport?

Cảm ơn

Trả lời

10

Tôi đã mở một chủ đề tương tự về cùng một vấn đề, How integrate loopback third-party login for android. Sau đó tìm thấy một giải pháp cho việc này.

Trước hết, điều quan trọng là phải nói rằng, người dùng loopback có thể có nhiều mã thông báo truy cập hơn trong cùng một thời điểm. Khi bạn đăng nhập từ trang web hoặc ứng dụng dành cho thiết bị di động của mình, vòng lặp tạo một mã thông báo truy cập mỗi lần.

Nếu bạn đang hỏi về để có được access token, đã có một cách để làm điều này, vì vậy bạn có thể nhận được thẻ truy cập sử dụng phương pháp đăng nhập như thế

User.login({username: 'foo', password: 'bar'}, function(err, accessToken) { 
    console.log(accessToken); 
}); 

Điều duy nhất bạn phải làm đang gọi phương thức được lưu trữ này từ ứng dụng Android của bạn. Bạn có thể sử dụng loopback android sdk (cách thích hợp) hoặc tên đăng nhập gửi bài và mật khẩu để máy chủ và xử lý, chỉ cần như thế

app.post('/android/custom_login', function(req, res){ 
    var username = req.body.username; 
    var password = req.body.password; 

    User.login({username: username , password: password }, function(err, accessToken) { 
     console.log(accessToken); 
     return res.send(accessToken); 
    }); 
}); 

Nếu bạn đang hỏi về, để làm cho người dùng đăng nhập với tài khoản mạng xã hội và sau đó có thể truy cập token, tôi có thể mô phỏng một vài điều từ kịch bản google. Ngoài ra, bạn có thể kiểm tra thêm loopback github test

app.post('/android/custom_login', function(req, res){ 
    var provider = 'google'; 
    var authSchema = 'oAuth 2.0'; 

    // oneTimeCode from android 
    var oneTimeCode = req.body.oneTimeCode; 

    // Make a request to google api 
    // to exchange refreshToken and accessToken with using google apis 
    var accessToken = 'FROM GOOGLE API'; 
    var refreshToken = 'FROM GOOGLE API'; 

    // external id is your google or facebook user id 
    var externalId = 'FROM GOOGLE API'; 
    var email = 'FROM GOOGLE API'; 

    var credentials = {}; 
    credentials.externalId = externalId; 
    credentials.refreshToken = refreshToken; 

    var profile = {}; 
    profile.id = externalId; 
    profile.emails = [{type:'account', value: email}]; 

    UserIdentityModel.login(
    provider, authSchema, profile, credentials , 
    {autoLogin:true}, function(err, loopbackUser, identity, token){ 
      if(err) throw err; 
      // token is access token for thig login 
      return res.send(token); 
    }); 
}); 

Trong kịch bản google, tôi nhận được mã một lần khi người dùng nhấp vào nút đăng nhập.Sau đó, đăng mã một lần vào máy chủ của tôi để trao đổi với mã thông báo truy cập và mã thông báo làm mới. Ngoài ra ở đây, tôi đang nhận được thông tin hồ sơ người dùng từ google.

hồ sơ và cung cấp dịch vụ, là thực sự quan trọng vì UserIdentityModel.login() phương pháp tạo ra một người dùng vô danh với việc sử dụng nhà cung cấp và profile.id (nếu các infos không tồn tại)

Sau khi tất cả các bạn sẽ có một thẻ truy cập cho ứng dụng android, như bạn thấy

0
  1. Sử dụng Loopback-Passport example
  2. Từ server.js, thay thế mã như sau

    app.get('/auth/account', ensureLoggedIn('/login'), function (req, res, next) { 
        res.json(req.accessToken); 
    
        }); 
    
  3. Sử dụng accessToken từ dòng trên, bạn có thể sử dụng API LoopBack.Bạn có thể mở rộng mã để tạo API tùy chỉnh của riêng mình.

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