2013-03-26 100 views
15

Tôi đang sử dụng Google APIs Client Library for JavaScript (Beta) để cho phép người dùng tài khoản google trên ứng dụng web (đối với thao tác trên youtube). Mọi thứ đều hoạt động tốt, nhưng tôi không biết làm cách nào để "đăng xuất" người dùng khỏi ứng dụng của tôi, tức là đặt lại mã thông báo truy cập.Cách đặt lại ủy quyền google oauth 2.0?

Ví dụ, đoạn mã sau kiểm tra uỷ quyền sử dụng và nếu không, thấy cửa sổ popup cho người dùng để đăng nhập vào tài khoản và giấy phép truy cập ứng dụng web để dữ liệu người dùng:

gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: false}, handleAuth); 

Nhưng thư viện khách hàng không có phương pháp để đặt lại ủy quyền.

workaround để chuyển hướng người dùng đến "accounts.google.com/logout", nhưng cách tiếp cận này không phải là điều tôi cần: do đó chúng tôi đăng nhập người dùng khỏi tài khoản google không chỉ từ đơn đăng ký của tôi mà còn ở bất cứ đâu.

Google faq và mô tả thư viện khách hàng không hữu ích.

+0

[Câu hỏi trùng lặp] (http://stackoverflow.com/questions/14723383/google-logout-using-api-javascript-jquery) –

Trả lời

9

Hãy thử thu hồi mã thông báo truy cập, điều đó sẽ thu hồi khoản trợ cấp thực tế để việc chấp thuận tự động sẽ ngừng hoạt động. Tôi cho rằng điều này sẽ giải quyết vấn đề của bạn.

https://developers.google.com/accounts/docs/OAuth2WebServer#tokenrevoke

+0

Cảm ơn rất nhiều. Nó hoạt động như một say mê. – ZavtraMen

+1

Để biết giải pháp JavaScript, hãy xem câu hỏi khác này: http://stackoverflow.com/questions/12809339/how-to-revoke-an-authentication-token-client-side-against-the-google-api/19205371#19205371 –

0

Đơn giản chỉ cần sử dụng: gapi.auth.setToken(null);

7

của nó rất đơn giản. Chỉ cần thu hồi quyền truy cập.

void RevokeAcess() 
{ 
    try{ 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost("https://accounts.google.com/o/oauth2/revoke?token="+ACCESS_TOKEN); 
    org.apache.http.HttpResponse response = client.execute(post); 
    } 
    catch(IOException e) 
    { 
    } 
} 

Nhưng nó phải ở trong AsyncTask

0

Nó phụ thuộc những gì bạn có nghĩa là bằng cách đặt lại uỷ quyền. Tôi có thể nghĩ đến một ba cách để làm điều này:

  1. Remove ủy quyền trên máy chủ
    Đến myaccount.google.com/permissions, tìm ứng dụng của bạn và loại bỏ nó. Lần tới khi bạn cố gắng đăng nhập, bạn phải hoàn thành luồng ủy quyền đầy đủ với trình chọn tài khoản và màn hình chấp thuận.

  2. Đăng xuất trên máy khách
    gapi.auth2.getAuthInstance(). SignOut();
    Bằng cách này, máy chủ ủy quyền của Google vẫn nhớ ứng dụng của bạn và mã thông báo ủy quyền vẫn còn trong bộ nhớ trình duyệt.

  3. Đăng xuất và ngắt kết nối
    gapi.auth2.getAuthInstance(). SignOut();
    gapi.auth2.getAuthInstance(). Disconnect();
    Điều này tương đương với (1) nhưng trên máy khách.

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