2016-07-06 14 views
10

Tôi sử dụng thư viện JS gọi firebase.auth().signInWithEmailAndPassword(email, password) và lấy lại đối tượng User. Đối tượng User chứa refreshToken.Cách sử dụng Firebase refreshToken để xác thực lại?

Tôi sử dụng curl 'https://docs-examples.firebaseio.com/rest/saving-data/auth-example.json?auth=TOKEN' để thực hiện cuộc gọi đến Firebase.

Mã thông báo cuối cùng sẽ hết hạn. Để làm cho ứng dụng trông giống như ứng dụng (iOSmacOS) có thông tin đăng nhập liên tục, tôi muốn làm mới mã thông báo, tôi làm cách nào để sử dụng thư viện REST hoặc JS? Tôi không thể tìm thấy bất kỳ cuộc gọi nào trong tài liệu cho phép tôi sử dụng số refreshToken để nhận số token mới.

Trả lời

6

Hiện nay cách duy nhất tôi tìm thấy để làm điều này là ở đây: https://developers.google.com/identity/toolkit/reference/securetoken/rest/v1/token

Bạn phải tạo lại HTTP quest:

POSThttps://securetoken.googleapis.com/v1/token?key=YOUR_KEY

đâu YOUR_KEY có thể được tìm thấy trong Google developers console > API Manager > Credentials. Nó nằm trong phần API Keys.

Hãy chắc chắn rằng cơ thể yêu cầu được cấu trúc theo định dạng sau:.

grant_type=refresh_token&refresh_token=REFRESH_TOKEN

đâu REFRESH_TOKEN là refresh token từ đối tượng sử dụng căn cứ hỏa lực khi họ đăng nhập

Cuộc gọi POST sẽ trả về một mới access_token.


** CẬP NHẬT ** này bây giờ cũng ghi lại trong tài liệu căn cứ hỏa lực nghỉ ngơi theo Exchange a refresh token for an ID token phần:

https://firebase.google.com/docs/reference/rest/auth/

+0

Yêu cầu này có hoạt động để làm mới mã thông báo API của Gmail không? @kgaidis – ArtStyle

+0

@ArtStyle Tôi không quen với API Gmail, vì vậy tôi không biết – kgaidis

+0

Tác phẩm này nhưng tiếc là không kích hoạt [onIdTokenChanged] của firebase (https://firebase.google.com/docs/reference/js/firebase. auth.Auth # onIdTokenChanged) listener ... Tôi cảm thấy nó nên – Luiz

5

Khi bạn thực hiện cuộc gọi từ trình duyệt .getToken(true) sẽ tự động làm mới mã thông báo của bạn. Thực hiện cuộc gọi như thế này:

firebase.auth().currentUser.getToken(/ forceRefresh/true) 
.then(function(idToken) { 

}).catch(function(error) { 

}); 

Thông tin thêm ở đây https://firebase.google.com/docs/reference/js/firebase.User#getIdToken

Cập nhật:

getToken() bị phản đối bây giờ, sử dụng thay vì getIdToken(true)

+2

Bạn hiện tại sẽ không sử dụng NULL khi khởi chạy ứng dụng mới?Tôi không biết nó như thế nào trên một trình duyệt thông thường, nhưng tôi không lưu trữ bất kỳ cookie hoặc dữ liệu cục bộ nào. Tôi chỉ lưu trữ refreshToken và bất kỳ thứ gì khác mà tôi đặc biệt cần. – kgaidis

+1

Đăng nhập là cần thiết để được thực hiện trước tiên để sử dụng mã đó. Nếu bạn sử dụng đăng nhập bằng firebase thì nó sẽ hoạt động. – Yevgen

+2

Điều này! Nhưng '.getToken' không được dùng nữa, bạn phải sử dụng' .getIdToken'. –

0
// Create a callback which logs the current auth state 
function authDataCallback(authData) { 
    if (authData) { 
    console.log("User " + authData['uid'] + " is logged with token" + authData['ie']); 
    } else { 
    console.log("User is logged out"); 
    } 
} 
// Register the callback to be fired every time auth state changes 
var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 
ref.onAuth(authDataCallback); 

Event onAuth sẽ được kêu gọi làm mới trang, nếu người dùng đã bị đăng xuất authData sẽ không có giá trị, khác không. Bạn có thể tìm thấy mã thông báo trong authdata['ie']. Trong ảnh chụp màn hình dưới đây, tôi đã in mã thông báo sau đối tượng auth và authdata, cách bạn có thể xem authData ['ie'] và mã thông báo tương tự.

authdata.ie and token

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