2015-01-20 41 views
7

Tôi đang cố gắng lấy hồ sơ của người dùng bằng cách sử dụng api Google OAuth2. Sau khi xác thực người dùng, trên trang sự đồng ý, Tôi luôn luôn yêu cầu "hoàn thành bản truy cập"Luôn "Có quyền truy cập ngoại tuyến" | Google OAuth 2

URL trong trình duyệt trông giống như: -

https://accounts.google.com/o/oauth2/auth? phạm vi = email & response_type = mã & redirect_uri = https://localhost/google_oauth2_login&state=YbzrDo&client_id=asdfasdf-60qhnqf6asdfasdfasdfcopo3plhoj.apps.googleusercontent.com&hl=en-US&from_login=1&as=604c0f3asdfasdf

Như có thể nhìn thấy trong URL trên, tôi đã trôi qua tham số phạm vi như 'email'

Google Auth API trang nói: -

"Phạm vi này yêu cầu ứng dụng của bạn được cấp quyền truy cập:

địa chỉ email tài khoản Google của người dùng. Bạn truy cập vào địa chỉ email bằng cách gọi people.get, trả về mảng email (hoặc bằng cách gọi số people.getOpenIdConnect, trả về thuộc tính email ở định dạng tuân thủ OIDC). tên miền Google Apps, nếu có, mà người dùng thuộc về. Tên miền được trả về là tên miền thuộc tính from people.get (hoặc thuộc tính hd từ getOpenIdConnect). phạm vi email này tương đương với và thay thế phạm vi https://www.googleapis.com/auth/userinfo.email."

Tại sao tôi yêu cầu cập Offline mỗi lần?

enter image description here

Google API Console Page for WEB APPLICATION

+2

điều này xảy ra nếu có các mã thông báo xuất sắc. thu hồi chúng để giải quyết nó. thêm tại đây http://stackoverflow.com/questions/21405274/this-app-would-like-to-have-offline-access-when-access-type-online/29267449#29267449 – amwinter

Trả lời

0

Hình như bạn đã đăng ký ứng dụng gốc của bạn nhận được mã thông báo làm mới theo mặc định, đó là mã thông báo tồn tại lâu dài, mà Chủ sở hữu tài nguyên nhận được thông báo và màn hình chấp thuận vì các tác động bảo mật vốn có của nó. Thay đổi loại khách hàng của bạn để "Ứng dụng Web" giả định rằng là nó là gì ...

+0

Tôi đã cập nhật câu hỏi với ảnh chụp màn hình của trang bảng điều khiển google của tôi. Tôi đã sử dụng id ứng dụng khách và seceret cho 'Client ID cho ứng dụng web'. –

+0

Có lẽ bạn có thể thử với client_id được tạo mới và kiểm tra lại rằng client_id trong yêu cầu ủy quyền là quyền (= mới) không? –

+0

-1 câu trả lời là không đúng hoặc thiếu ứng dụng gốc và web hàng đầu sẽ trả về mã thông báo làm mới. web có thể cần cung cấp access_type off line nếu bạn đang sử dụng một lib khách hàng mà ẩn giống như nói PHP. – DaImTo

1

Có hai thông số có thể gây ra dấu nhắc này:

  • access_type (nếu nó là 'ẩn', nhận mã thông báo refresh)
  • approval_prompt (nếu nó là 'lực')

Một tài liệu tham khảo về vấn đề này có thể được tìm thấy here.

Cố gắng thay đổi thông số approval_prompt thành 'tự động' hoặc thêm thông số đó vào yêu cầu của bạn và kiểm tra tham số access_type để 'trực tuyến' hoặc thêm thông số đó vào yêu cầu của bạn.

+0

Tôi tự hỏi liệu thông tin này có phải là hiện tại hay không. Tôi đang cố gắng truy cập ngoại tuyến. Tôi đang đặt 'access_type = offline' và' approval_prompt = force' và vẫn không có niềm vui. – Qasim

2

nếu bạn đang sử dụng mô-đun nút js 'everyauth', bạn có thể ghi đè giá trị googles mặc định bằng cách

.authQueryParam({ access_type:'online', approval_prompt:'auto' }) 
9

tôi đã cùng một vấn đề, và sau khi googling cho một thời gian dài, tôi thấy liên kết này:

"This app would like to: Have offline access" when access_type=online

đề nghị xóa 'localhost' trong redirect_uri và nó hoạt động cho tôi.

+1

Tôi không thấy "localhost" được đề cập ở bất kỳ đâu trên trang đó. Liên kết có chính xác không? – Bampfer

+0

Điều này phù hợp với tôi, mặc dù tôi cũng không tìm thấy bất kỳ thông tin liên quan nào trong liên kết đó. –

+0

Công trình này! Tôi đã chỉnh sửa tệp lưu trữ của mình và thêm dòng '127.0.0.1 localhost.com' và thay đổi redirect_uri để khớp – Subtletree

7

Vì bạn đang chuyển hướng trở lại http: s/localhost: /. Điều này có ý nghĩa bởi vì bất kỳ ứng dụng nào yêu cầu chuyển hướng đến localhost rõ ràng là chạy cục bộ.

Chuyển hướng nó đến địa chỉ web công khai và nó sẽ không làm phiền bạn.

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