2015-04-21 27 views
13

Tôi có một ứng dụng web đơn javascript đơn giản sử dụng "Đăng nhập bằng Google dành cho trang web": https://developers.google.com/identity/sign-in/web/sign-inCách nhận mã thông báo truy cập từ SDK Javascript đăng nhập của Google?

Làm cách nào để nhận mã thông báo truy cập cho người dùng? Tôi cần xác nhận có thể xác minh danh tính của người dùng trên máy chủ của tôi. Tôi không muốn truy cập ngoại tuyến; Tôi chỉ muốn biết rằng khi máy khách web gửi yêu cầu ajax đến máy chủ của tôi, tôi có thể tin tưởng danh tính của người dùng đã đăng nhập.

Trả lời

35

Để xác minh, nó sẽ là tốt hơn để sử dụng id_token mà là một phần của câu trả lời xác thực, và có thể được lấy ra tại bất kỳ điểm như thế này:

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse().id_token 

API Google thư viện khách hàng cung cấp các chức năng để xác minh id_token và cung cấp cho bạn thông tin người dùng được liên kết ở phía máy chủ: https://developers.google.com/api-client-library/

+1

Một lần nữa bạn là một anh hùng. Tôi đã dành khoảng hai giờ đêm qua không tìm thấy điều này một chút trong tài liệu này. Cảm ơn. – stickfigure

+2

@stickfigure nếu bạn quan tâm, tôi cũng đã viết một bài viết về truy cập phía máy chủ với API Identity mới ngay hôm nay, vì có một số câu hỏi sắp tới và tài liệu chưa thực sự mở rộng về nó: http://codingwithgerwin.blogspot.co.at/2015/04/google-sign-in-20-server-side.html – Scarygami

+1

Bài viết tuyệt vời, tôi hy vọng nó được lập chỉ mục nhanh chóng :) – stickfigure

-1

Hy vọng bạn đang hoạt động tốt. Đây là giải pháp, Bạn có thể thử điều này: Thực tế không có tên hàm getAccessToken (Chỉ Android) xác định trong GoogleSignin.android.js như được viết ở đây https://github.com/devfd/react-native-google-signin. Nhưng phần tốt nhất là họ đã triển khai giải pháp trong GoogleSignin.android.js. chỉ cần xem mã bên dưới từ GoogleSignin.android.js

currentUserAsync() { 
return new Promise((resolve, reject) => { 
    const sucessCb = DeviceEventEmitter.addListener('RNGoogleSignInSilentSuccess', (user) => { 
    this._user = user; 

    RNGoogleSignin.getAccessToken(user).then((token) => { 
     this._user.accessToken = token; 
     this._removeListeners(sucessCb, errorCb); 
     resolve(this._user); 
    }) 
    .catch(err => { 
     this._removeListeners(sucessCb, errorCb); 
     resolve(this._user); 
    }); 
    }); 

Điều này chỉ là chúng tôi đã sử dụng mã này một cách khôn ngoan. Tôi đã sử dụng mã bên dưới để nhận access_token và nó giúp tôi giải quyết vấn đề mã thông báo truy cập của mình. tôi thay đổi trên chức năng như thế này trong GoogleSignin.android.js

currentUserAsync() { 
return new Promise((resolve, reject) => { 
    const sucessCb = DeviceEventEmitter.addListener('RNGoogleSignInSilentSuccess', (user) => { 
    this._user = user; 

    RNGoogleSignin.getAccessToken(user).then((token) => { 
     this._user.accessToken = token; 
     this._removeListeners(sucessCb, errorCb); 
     resolve(token); 
    }) 
    .catch(err => { 
     this._removeListeners(sucessCb, errorCb); 
     resolve(this._user); 
    }); 
    }); 

và tôi gọi hàm này như thế này từ index.android.js.

_signIn() { 
    GoogleSignin.signIn() 
     .then((user) => { 
      console.log('this1' + JSON.stringify(user)); 
      this.setState({user: user}); 
      var gettoken = GoogleSignin.currentUserAsync(user).then((token) => { 

       console.log('USER token', token); 
       this.setState({user: user}); 
      }).done(); 

     }).catch((err) => { 
      console.log('WRONG SIGNIN', err); 
     }) 
     .done(); 
} 

Bạn có thể gọi nó là một chức năng riêng lẻ giống như thế này. trong GoogleSignin.android.js

getAccessTok(user) 
{ 
    RNGoogleSignin.getAccessToken(user).then((token) => { 
     this._user.accessToken = token; 
     resolve(token); 
     }) 
     .catch(err => { 
      this._removeListeners(sucessCb, errorCb); 
      console.log('got error'); 
      resolve(this._user); 
     }); 
    } 

và từ index.android.js chỉ cần gọi chức năng này như thế này

_getToken(){ 
    console.log(GoogleSignin.getAccessTok(this.state.user)); 
} 

duy nhất bạn phải làm là để vượt qua người dùng hiện tại để có thể truy cập token. Hy vọng điều này sẽ giúp bạn. Có một ngày tuyệt vời.Cảm ơn bạn.

+0

Bạn có thể vui lòng cung cấp mã nguồn đầy đủ không – vishnumm93

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