7

Xin lỗi cho câu hỏi noob khác, thông thường tôi không cho vào cho đến khi tôi tự tìm ra giải pháp nhưng điều này đã khiến tôi mất 3 ngày và đã đến lúc phải thừa nhận bị mắc kẹt ...Khởi chạy thông tin nhận dạng ChromeWebAuthFlow chỉ mở trang gọi lại trống

tôi đang cố gắng để authenicate một phần mở rộng Chrome để sử dụng dữ liệu người dùng PushBullet qua OAuth2:

background.js

var client_id = '<32 DIGIT CLIENT ID>'; 
var redirectUri = "chrome-extension://lgekckejcpodobwpelekldnhcbenimbe/oauth2"; 
var auth_url = "https://www.pushbullet.com/authorize?client_id=" + client_id + "&redirect_uri=" + encodeURIComponent(redirectUri) + "&response_type=token"; 

chrome.identity.launchWebAuthFlow({'url':auth_url,'interactive':true}, function(redirect_url){ 
    console.log(redirect_url) 
}); 

manifest.json:

"permissions": [ 
    "identity", 
    "*://*.google.com/*", 
    "*://*.pushbullet.com/*", 
    "storage" 
    ], 
    "web_accessible_resources": [ 
    "/oauth2/*" 

Khi tôi tải phần mở rộng:

  1. Các Pushbullet phép pop-up sẽ mở ra và yêu cầu để cung cấp cho phép mở rộng của tôi (OK)
  2. Tôi đồng ý (OK)
  3. Các Cửa sổ Pushbullet đóng và một trang trống mới sẽ mở ra URL của rằng các cửa sổ là URI gọi lại có mã thông báo:

chrome-mở rộng: //lgekckejcpodobwpelekldnhcbenimbe/oauth2#access_token=o.zrrWrDozxMu6kftrMHb89siYJQhRVcoL

Tôi không mong đợi một trang trống để mở nhưng thay vì có launchWebAuthFlow chiếm được URI và có nó viết bằng giao diện điều khiển đăng nhập như mã trong hàm callback ... nhưng có vẻ như để chờ đợi ...

các lựa chọn duy nhất bây giờ là đóng trang trống này chỉ để xem đăng nhập sau đây:

Không được kiểm tra runtime.lastError khi chạy identity.launchWebAuthFlow: Người dùng không phê duyệt quyền truy cập.

Rõ ràng tôi đang thiếu thứ gì đó quan trọng ... tôi có cần mã bổ sung "ở đâu đó" để nhận URI gọi lại trong background.js không?

Cảm ơn, thực sự yêu cầu trợ giúp.

ShadowHunter

Trả lời

11

Bạn đang hiểu nhầm các identity API.

Bạn không thể sử dụng URL với URL gọi lại tùy chỉnh. API hy vọng bạn sử dụng một URL có dạng

https://<app-id>.chromiumapp.org/* 

mà bạn có thể có được với một cuộc gọi đến chrome.identity.getRedirectURL(path)

Khi nhà cung cấp chuyển hướng đến một URL phù hợp với mô hình https://<app-id>.chromiumapp.org/*, cửa sổ sẽ đóng, và URL chuyển hướng cuối cùng sẽ được chuyển đến hàm gọi lại.

Điều này là do rất nhiều nhà cung cấp OAuth sẽ không chấp nhận URL chrome-extension:// hợp lệ.

Nếu bạn làm - tuyệt vời, nhưng bạn sẽ cần phải sử dụng thư viện OAuth của riêng bạn (và bộ nhớ mã thông báo, điều này còn tệ hơn). chrome.identity chỉ hoạt động với các bước trên.

Lưu ý rằng yêu cầu mạng không thực sự được gửi đến địa chỉ chromiumapp.org trong luồng này - đó là địa chỉ "ảo" bị chặn bởi API.

+0

Xin chào Xan, cảm ơn bạn rất, rất nhiều ... Thay đổi URL gọi lại theo đề nghị của bạn đã làm nó. Hoạt động hoàn hảo ngay bây giờ, – ShadowHunter

7

Một eleboration nhanh chóng trên giải pháp cho bất cứ ai khác mà có thể đấu tranh với nó:

Đây là đoạn code làm việc:

background.js

var client_id = '<CLIENT_ID>'; 
var redirectUri = chrome.identity.getRedirectURL("oauth2");  
var auth_url = "https://www.pushbullet.com/authorize?client_id=" + client_id + "&redirect_uri=" + redirectUri + "&response_type=token"; 

    chrome.identity.launchWebAuthFlow({'url':auth_url,'interactive':true}, function(redirect_url){ 
     console.log(redirect_url) 
    }); 

manifest.js

"permissions": [ 
    "identity", 
    "*://*.google.com/*", 
    "*://*.pushbullet.com/*", 
    "storage" 
    ],  

Một lần nữa, cảm ơn bạn Xan và có một ngày tuyệt vời.

Với Trân,

ShadowHunter

+0

Bạn có _really_ muốn hiển thị ID khách hàng đó ở đây không? Nếu không, hãy chỉnh sửa để thay thế ID bằng thứ gì đó hiển nhiên là giả mạo và tạo lại ID. Bạn cũng có thể gắn cờ câu trả lời của bạn cho sự chú ý của người kiểm duyệt yêu cầu xóa lịch sử chỉnh sửa. – Xan

+0

Hi Xan, đừng lo, nó là giả mạo ... nhưng bạn đúng, tôi chỉnh sửa nó để làm cho nó rõ ràng hơn ... cảm ơn vì đã chỉ ra – ShadowHunter

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