2012-07-13 13 views
10

Khi yêu cầu thông tin xác thực OAuth, tôi có thể chỉ định access_type là Ngoại tuyến hoặc Trực tuyến.Khi nào là access_type = Trực tuyến thích hợp? : OAuth2 - Google API

Chọn loại truy cập trực tuyến buộc người dùng chấp thuận quyền truy cập vào ứng dụng của tôi mỗi khi họ đăng nhập. Tại sao vậy? Không phải người dùng đã chấp thuận ứng dụng của tôi chưa?

Update # 1:

Tôi có approval_prompt tôi thiết lập để 'tự động'.
Nếu tôi vừa đăng xuất khỏi Google mà không xóa bất kỳ cookie nào, nó sẽ không nhắc tôi lại. Nhưng việc xóa cookie sẽ mang lại màn hình tài trợ.

Cập nhật # 2:

Nó hoạt động tốt qua OAuth sân chơi. http://code.google.com/oauthplayground/

Sử dụng OAuth 2.0 cho máy chủ ứng dụng web https://developers.google.com/accounts/docs/OAuth2WebServer

Update # 3: mã có liên quan snippets phương pháp

Helper để tạo URL OAuth

def build_auth_uri 
    return @client.authorization.authorization_uri(
    :access_type => :online, 
    :approval_prompt => :auto 
    ).to_s 
end 

Gọi phương thức trợ giúp trong Chế độ xem

<a href="<%= build_auth_uri %>"> Connect Me! </a> 

tạo OAuth URL trên trang web

https://accounts.google.com/o/oauth2/auth?access_type=online&approval_prompt=auto&redirect_uri=http://localhost:3000/gclient/gcallback&response_type=code 
+0

Tôi cũng đang đối mặt với vấn đề chính xác. Tìm URL yêu cầu của tôi bên dưới: 'https://accounts.google.com/o/oauth2/auth?scope=https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com /auth/userinfo.profile&state=profile&redirect_uri=http: // localhost/oacallback & response_type = code & client_id = 123.apps.googleusercontent.com & approval_prompt = auto & access_type = online' –

+1

@jayyov Hành vi này vẫn thất thường đối với tôi. Có vẻ như có một sự khác biệt giữa làm điều này trên localhost vs trang web lưu trữ quá. –

+0

Đã bao giờ có một giải pháp cho điều này? Tôi thấy cùng một vấn đề. Tôi cũng nhận thấy rằng bất kể số lần tôi chấp thuận ứng dụng không xuất hiện trong trang Quản lý ứng dụng của tôi. – mwielbut

Trả lời

13

Có một tham số khác mà đi vào chơi trong các dòng chảy và tôi nghi ngờ bạn đang chạy vào nó. Đó là thông số approval_prompt.

Khi access_type=online bạn cũng được phép chỉ định giá trị cho approval_prompt. Nếu được đặt thành approval_prompt=force, người dùng của bạn sẽ luôn được nhắc, ngay cả khi họ đã được cấp.

Mặt khác, khi access_type=offline, approval_prompt chỉ có thể được thiết lập để approval_prompt=force, nhưng để bù đắp cho hạn chế này bạn cũng đang cung cấp một refresh_token mà bạn có thể sử dụng để làm mới thẻ truy cập của bạn.

Kiểm tra URL mà access_type=online đang mở. Thử đặt approval_prompt=auto. Màn hình tài trợ chỉ xuất hiện lần đầu tiên.

+0

Cảm ơn Jenny. Tôi nên đã đề cập rằng tôi đặt approval_prompt để tự động. Tôi vẫn nhận được màn hình tài trợ. Nó có phụ thuộc vào cookie không?Tôi xóa cookie của mình để kiểm tra lại thông tin đăng nhập. Tôi cho rằng máy chủ OAuth lưu trữ phê duyệt của người dùng. Nếu tôi chỉ đăng xuất khỏi Google mà không xóa tất cả cookie, nó sẽ không hiển thị màn hình tài trợ. –

+0

Có thể. Nếu bạn xóa tất cả các cookie của mình, bạn sẽ bị đăng xuất khỏi Google và bạn sẽ bị buộc phải đăng nhập lại để xác thực. Bạn có ví dụ về mã hoạt động sai của mình không? Tôi rất muốn có một cái nhìn :) – mimming

+0

Thx Jenny! Tôi đã thêm một số đoạn mã có liên quan vào Câu hỏi. Bạn cần nhiều hơn? Liên quan đến cookie, nếu cookie bị xóa, người dùng có cần phải cấp lại quyền truy cập không? Tôi có thể hiểu nếu họ cần xác thực lại. –