Google API: ไม่ใช่ต้นทางที่ถูกต้องสำหรับไคลเอ็นต์: url ไม่ได้รับอนุญาตพิเศษสำหรับรหัสไคลเอ็นต์“ ID”


95

ฉันต้องการความช่วยเหลือ. ฉันไม่พบคำตอบสำหรับคำถามของฉัน ฉันลองใช้ googling และพยายามถามในด้านอื่น ๆ แต่ก็ไม่พบคำตอบ

ฉันกำลังทำงานกับ google API (Youtube data API) และฉันใช้โค้ดตัวอย่างจากฝั่ง google ซึ่งเป็นโค้ดที่ใช้งานได้ฉันค่อนข้างมั่นใจในเรื่องนั้น ฉันได้รับข้อผิดพลาดเมื่อพยายามเริ่มสคริปต์:

รายละเอียด: "ไม่ใช่ต้นทางที่ถูกต้องสำหรับไคลเอ็นต์:" MyURL "ไม่ได้รับอนุญาตพิเศษสำหรับรหัสไคลเอ็นต์" MyID "โปรดไปที่https://console.developers.google.com/และกำหนดต้นทางนี้เป็นรายการที่อนุญาตพิเศษสำหรับรหัสลูกค้าของโครงการของคุณ "

ข้อผิดพลาด: "idpiframe_initialization_failed"

ปัญหาที่ฉันอนุญาตพิเศษเว็บไซต์ของฉันและเป็นที่ยอมรับ ฉันไม่รู้ว่ามีอะไรผิดปกติ ฉันควรทำอย่างไรเพื่อ "อนุญาตพิเศษ" โดเมนของฉัน (เป็นรายการที่อนุญาตพิเศษ)

และอีกคำถาม ฉันไม่ได้ค้นหาคำตอบสำหรับคำถามนี้มาก่อน

ฉันคิดว่าเป็นไปได้ที่ฉันจะใช้รหัสบน Localhost ฉันคิดว่าฉันต้องอนุญาตที่อยู่ localhost ของฉันหรืออะไรทำนองนี้ แต่การอนุญาตพิเศษใช้ไม่ได้

  • DreamGamer

2
ยังคงประสบปัญหาเดิม. มีใครมีวิธีอื่นในการแก้ปัญหาหรือไม่?
Yashu Mittal

ในกรณีของฉันใช้httpสาเหตุของปัญหา การเปลี่ยนเพื่อhttpsแก้ปัญหา
เสี่ยว

1
สำหรับผู้ที่เพิ่มโดเมนในโดเมนที่ได้รับอนุญาตแล้วเพียงแค่ล้างแคชของไซต์ของคุณมันจะทำงานได้แน่นอนหากข้อมูลทั้งหมดถูกตั้งค่าไว้อย่างแท้จริง
Haritsinh Gohil

คำตอบ:


76

มีปัญหาเดียวกันและนี่คือวิธีที่ฉันแก้ไข:

  1. เปิดใช้งานทั้ง Analytics และ Google Plus API ในโครงการของคุณ
  2. สร้างข้อมูลรับรองไคลเอ็นต์ OAUTH 2.0 ใหม่
    • เพิ่มผู้มีอำนาจกำเนิด Javascriptภายใต้ข้อ จำกัดส่วน
  3. ใช้รหัสไคลเอ็นต์ใหม่

สนุก.


OMG ขอบคุณมาก! มันทำงานให้ฉัน ปัญหาอย่างหนึ่งของฉันคือฉันใช้รหัสไคลเอ็นต์ไม่ใช่รหัสไคลเอ็นต์
DreamGamer

4
ฉันควรจะเคลียร์ว่าถ้าคุณสร้าง oAuth สำหรับพอร์ตอื่นแล้ว ด้วยเหตุผลบางประการคุณไม่สามารถแก้ไขพอร์ตใหม่เพื่อใช้พอร์ตอื่นได้ โดยพื้นฐานแล้วฉัน "สร้างข้อมูลรับรองอื่น" สำหรับพอร์ตใหม่ เห็นได้ชัดว่าสิ่งนี้จะสร้างโทเค็นอื่น ดังนั้นเพียงแค่คว้ามันและใช้แทน คุณสามารถเก็บโทเค็นทั้งสองไว้ในคอนโซล
Sam3k

ขอบคุณ! มันใช้งานง่าย แต่เป็นคำตอบที่ถูกต้อง ค่อนข้างบ้าที่คุณไม่สามารถเพิ่ม API ที่คุณต้องการ (ซึ่งยังไม่ชัดเจน) ลงในคีย์ที่มีอยู่ของคุณ การสร้างการกำหนดค่าใหม่ทั้งหมดสำหรับคีย์เป็นความเจ็บปวด
beachCode

คุณกำลังบอกว่าจะเปิดใช้งาน Googe Plus API แต่อะไรคือความสัมพันธ์ระหว่าง Youtube API และ Google Plus API
Yashu Mittal

ฉันไม่ค่อยเข้าใจความสัมพันธ์ตรงนี้ แต่มันเป็นสิ่งเดียวที่เหมาะกับฉัน (และคนอื่น ๆ )
Ezra Obiwale

201

ฉันล้างแคช เริ่มทำงานแล้ว.

ใน Chrome: การตั้งค่า -> ขั้นสูง -> ล้างข้อมูลการท่องเว็บ -> รูปภาพและไฟล์ที่แคชไว้


1
ขอบคุณฉันทำทุกอย่างถูกต้องและกำลังมีปัญหา
cura

2
สิ่งนี้ใช้ได้ผลสำหรับฉันในขณะที่ใช้การลงชื่อเข้าใช้ Google สำหรับเว็บแอปพลิเคชันของฉัน ขอบคุณ!
Sahil Lakhwani

1
ฉันโหวตคุณแล้วครั้งหนึ่งเมื่อสิ่งนี้เกิดขึ้นกับฉันเมื่อสองสามเดือนก่อน แต่คุณสมควรได้รับอีก ... +1
howMuchCheeseIsTooMuchCheese

1
คำตอบนี้ไม่ได้ช่วยฉัน
tishma

2
มีคำขอจำนวนมากเกิดขึ้น ฉันคิดว่าหนึ่งในนั้นกำลังถูกแคชโดยเบราว์เซอร์ดังนั้นจึงไม่ทราบเกี่ยวกับการเปลี่ยนแปลงที่คุณทำในคอนโซล API แต่ฉันคิดว่ามันง่ายกว่าที่จะปิดการใช้งานแคชทั้งหมดในขณะที่เบราว์เซอร์ DevTools เปิดอยู่ โดยส่วนใหญ่จะมีตัวเลือก (ช่องทำเครื่องหมาย) ในแท็บ "เครือข่าย" หลังจากเปิดใช้งานการรีเฟรชหน้าก็เพียงพอที่จะทำให้ใช้งานได้
Andreas Linnert

16

การล้างแคชเป็นเคล็ดลับสำหรับฉัน


3
เมื่อคุณทำสิ่งนี้แล้วอย่าลืมเข้าสู่ระบบอีกครั้งเพื่อ stackoverflow เพื่อเพิ่มคะแนน
Anand Rockzz


7

สำหรับฉันมันทำงานได้โดยไม่ต้องเพิ่ม API ใด ๆ เพิ่มเติมเช่น google analytics ตรวจสอบให้แน่ใจว่าได้เพิ่มรหัสไคลเอ็นต์ที่สมบูรณ์แล้วเปิดแอปในหน้าต่างที่ไม่ระบุตัวตนเพื่อหลีกเลี่ยงการบันทึกแคช หากเปิดแอพในหน้าต่างปกติแล้วให้ 1- ปิดแท็บทั้งหมดที่แอพเปิดอยู่ 2- ล้างแคชและคุกกี้ ใน chrome จะอยู่ในการตั้งค่า -> รหัสผ่านและแบบฟอร์ม -> ล้างข้อมูลการท่องเว็บ -> ขั้นสูง (แท็บ) -> เลือกก) คุกกี้และข้อมูลไซต์อื่น ๆ และ b) รูปภาพและไฟล์ที่แคชไว้ 3- เปิดหน้าต่างใหม่ที่ไม่ระบุตัวตนและทดสอบ แอป


2
ไม่จำเป็นต้องปิดแท็กทั้งหมดเพียงแค่เปิดหน้าต่างที่ไม่ระบุตัวตนก็เพียงพอแล้ว
Bert Verhees

3

เอกสารระบุว่าอย่ามองข้ามขั้นตอนสำคัญสองขั้นตอน ("เมื่อคุณทำตามคำแนะนำสิ่งสำคัญคือคุณต้องไม่มองข้ามขั้นตอนสำคัญสองขั้นตอนนี้: เปิดใช้งาน Analytics API นี่คือสิ่งที่ได้ผลสำหรับฉัน:

  1. เปิดใช้งาน Analytics API
  2. กลับไปที่ข้อมูลรับรองของคุณลบ OAuth 2.0 ก่อนหน้า
  3. ตอนนี้สร้าง OAuth ใหม่ที่มีต้นกำเนิดที่ถูกต้อง

2

ฉันยังทำตามคำแนะนำในตัวอย่างการเริ่มต้นอย่างรวดเร็วมีปัญหาเดียวกันลองใช้วิธีแก้ปัญหาทั้งหมดที่แนะนำที่นี่ แต่ไม่มีประโยชน์ลองทุกอย่างที่ฉันนึกได้ แต่ก็ไม่ได้ผล

ในที่สุดก็เห็นว่าฉันคัดลอกCLIENT_IDโดยเว้นวรรคตอนท้าย

  var CLIENT_ID = '44********-*****************.apps.googleusercontent.com ';

เมื่อฉันแก้ไขสิ่งนี้แล้ว (ลบช่องว่างเพิ่มเติม) มันใช้งานได้

ฉันเดาว่าข้อความแสดงข้อผิดพลาดไม่แม่นยำในกรณีนี้ หวังว่านี่จะช่วยได้


2

ฉันเพิ่งทำผิดพลาด: ลองใช้ตัวอย่างการเริ่มต้นอย่างรวดเร็วอย่างเป็นทางการและได้รับข้อความแสดงข้อผิดพลาดเดียวกันกับคุณ

ค่อนข้างสับสนเพราะตัวอย่างนั้นซับซ้อนกว่าที่ฉันต้องการเป็นการส่วนตัวมาก: ใช้ OAuth สำหรับการเข้าสู่ระบบของผู้ใช้ไม่ใช่แค่ไฟล์API key. หากคุณเป็นเหมือนฉันและคุณไม่ต้องการใช้ OAuth และคุณต้องการดึงข้อมูล Youtube เพียงบางส่วนโดยไม่ต้องดำเนินการใด ๆ ที่มีสิทธิพิเศษ (เช่นหากคุณต้องการค้นหาหรือแสดงรายการวิดีโอช่องหรือเพลย์ลิสต์เท่านั้น) ตัวอย่างนี้คือ สำหรับคุณ.

การแก้ปัญหาคือง่ายเพียงแค่ให้apiKeyแทนclientIdการgapi.client.init(ลิงค์: เอกสาร API ) เช่นดังนั้น:

const apiKey = '<my API key>';

function gooApiInitClient() {
  // Array of API discovery doc URLs for APIs used by the quickstart
  const discoveryDocs = [
    "https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest"
  ];

  return gapi.client.init({
    apiKey,
    discoveryDocs
  });
}

// see: https://developers.google.com/api-client-library/javascript/reference/referencedocs
gapi.load('client', {
  callback: function() {
    // we now have gapi.client! initialize it.
    gooApiInitClient().
      then(() => {
        // we can start using the API here!
        // e.g. gapi.client.youtube.videos.list(...);
      }).then(results => { 
        // use results here....
      });
  }
});

2
ฉันขอแนะนำให้ลดความซับซ้อนของข้อมูลโค้ดเพื่อให้คำตอบนี้ดีขึ้น การเรียก init มีเพียง 4 บรรทัดและนั่นคือสิ่งเดียวที่เปลี่ยนแปลงไป สิ่งอื่น ๆ ไม่เป็นประโยชน์
Charlie

ทำความสะอาดกันหน่อย :)
Domi

2

ฉันยังพยายามทำให้ตัวอย่างใช้งานได้ (จาก) https://developers.google.com/drive/api/v3/quickstart/js

ล้มเหลวอย่างต่อเนื่องแม้ว่าจะเพิ่มที่อยู่ IP ใน WebAPI แล้วก็ตาม

แต่คุณต้องเพิ่ม localhost: 8000 (ไม่ใช่แค่ 127.0.0.1:8000) ใน OAUTH ของคุณดังที่แสดงไว้ที่นี่:

ลูกค้า OAUTH

ลอยอยู่เหนือข้อความไคลเอนต์ OAUTH และมันจะกลายเป็นลิงค์ คลิกลิงก์นั้นและคุณสามารถเพิ่ม URI รวมถึงพอร์ตได้ ของฉันมี 127.0.0.1:8000 แล้ว แต่ไม่ใช่ locahost: 8000

locahost: 8000

นี่คือสิ่งที่น่าสนใจ / แปลก เมื่อฉัน ping localhost ฉันเห็น:

IPV6

ฉันคิดว่านั่นคือสิ่งที่ IPV6

อย่างไรก็ตามถ้าฉัน ping 127.0.0.1 ฉันเห็นการตอบสนองที่คาดไว้ (ผ่าน IPV4)

IPV4

อาจจะเป็นปลาเฮอริ่งสีแดง แต่ฉันไม่แน่ใจว่าค่าที่ป้อนใน OAUTH ได้รับผลกระทบหรือไม่

เหตุผลที่ฉันสังเกตเห็นเป็นเพราะเมื่อฉันเริ่มต้นเว็บเซิร์ฟเวอร์ Python ตามที่กำหนดไว้ในบทช่วยสอนฉันเห็นสิ่งต่อไปนี้และคิดว่ามันแปลก: ที่อยู่ python ip

หลังจากเพิ่ม localhost: 8000 URI ใน OAUTH เท่านั้นที่ใช้งานได้ แต่หลังจากเพิ่มแล้วก็ใช้งานได้ดี


2

ดังที่หลายคนระบุไว้ที่นี่นี่เป็นเพียงปัญหาการแคชของเบราว์เซอร์ ไม่จำเป็นต้องสร้างคีย์ใหม่หรือแม้แต่ล้างแคช ลองอีกครั้งในหน้าต่างใหม่ที่ไม่ระบุตัวตน (ไม่ระบุตัวตน) และควรใช้งานได้ดี


1

ฉันประสบปัญหาคล้ายกันในการพยายามเข้าสู่ระบบสำหรับเว็บแอปของฉัน สิ่งที่ฉันทำมีเพียงสร้างข้อมูลรับรองรหัสไคลเอ็นต์ OAuth ขึ้นใหม่จาก Cloud Platform เมื่อฉันทำสิ่งนี้และใช้รหัสลูกค้าใหม่ทุกอย่างก็ใช้ได้ดี ไม่แน่ใจว่าก่อนหน้านี้เกิดปัญหาอะไร แต่ตอนนี้ผ่านไปได้ด้วยดี

หากใครเจอสิ่งนี้จาก Google หรืออะไรไม่ได้ลองดู มันอาจจะใช้ได้ มันจะอธิบายคำตอบของ Ezra Obiwale เพราะนั่นคือการสร้างรหัสไคลเอ็นต์ใหม่หลังจากเพิ่ม API สองตัว

หากใครทราบคำอธิบายว่าทำไมถึงเกิดเหตุการณ์นี้ขึ้นจะได้รับการชื่นชม


0

ฉันประสบปัญหาเดียวกันนี้ - วิธีแก้ปัญหาสำหรับฉันคือเข้าไปที่ API Manager และเปิดใช้งาน Analytics API ไม่แน่ใจว่าปัญหาคืออะไร แต่ดูเหมือนว่าจะได้รับการแก้ไขแล้ว!


1
ฉันเปิดใช้งาน Analytics API แต่ไม่มีอะไรเปลี่ยนแปลง : C
DreamGamer

0

ฉันเชื่อว่าสิ่งนี้เกี่ยวข้องกับการแคชลองไปที่เบราว์เซอร์ของคุณและล้างแคชลอง: ใน chrome> การตั้งค่า> ขั้นสูง> ล้างข้อมูลการท่องเว็บ:>: รูปภาพและไฟล์ที่แคชไว้


0

สาเหตุหนึ่งที่ไม่สามารถทำงานได้คือมีการเข้าสู่ระบบเกินจำนวน (100) client IDครั้ง

คุณสามารถไปที่หน้าคอนโซล Google APIและสร้างข้อมูลรับรองไคลเอ็นต์ Oauth2 ใหม่ (อย่าลืมเพิ่ม URL แอปพลิเคชันของคุณด้านล่างAuthorized Javascript Origins) จากนั้นจึงใช้งาน


0

ฉันมีปัญหาเดียวกันเช่นกันจนกระทั่งฉันรู้ว่าเมื่อฉันคัดลอก client_ID มีช่องว่างในไฟล์ของฉันดังนั้นฉันจึงลบช่องว่างออกจากสตริงและทุกอย่างก็ทำงานได้ดีในตอนนี้


0

ฉันประสบปัญหาเดียวกันขณะทำงานกับการลงชื่อเข้าใช้ของ Google โดยใช้ react-social-login บน localhost ของฉัน ในจุดเริ่มต้นของรายการที่อนุญาตเราจะต้องระบุhttp: // localhost: 3000เพื่อให้ใช้งานได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.