Di situs web https://code.google.com/apis/console Saya telah mendaftarkan aplikasi saya, mengatur ID Klien yang dihasilkan : dan Rahasia Klien ke aplikasi saya dan mencoba masuk dengan Google. Sayangnya, saya mendapat pesan kesalahan:
Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI
scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id
Apa artinya pesan ini, dan bagaimana saya bisa memperbaikinya? Saya menggunakan permata omniauth-google-oauth2 .
authentication
oauth-2.0
google-signin
pengguna984621
sumber
sumber
https://accounts.google.com/o/oauth2/auth?client_id={client_id}&response_type=token&redirect_uri={redirect_uri}&scope={scope}
di browser, alih-alih menjalankan seluruh aplikasi Anda untuk menguji.Jawaban:
URI pengalihan (tempat respons dikembalikan) harus didaftarkan di konsol API, dan kesalahannya menunjukkan bahwa Anda belum melakukan itu, atau belum melakukannya dengan benar.
Buka konsol untuk proyek Anda dan lihat di bawah Akses API. Anda akan melihat
client ID
& diclient secret
sana, bersama dengan daftar URI pengalihan. Jika URI yang Anda inginkan tidak tercantum, klik edit pengaturan dan tambahkan URI ke daftar.Sunting: (Dari komentar yang berperingkat tinggi di bawah) Perhatikan bahwa memperbarui konsol google api dan perubahan yang ada dapat memakan waktu. Umumnya hanya beberapa menit tetapi terkadang terasa lebih lama.
sumber
Dalam kasus saya itu
www
dannon-www
URL. Situs aktual memilikiwww
URL dan URI Pengalihan Resmi di Google Developer Console memilikinon-www
URL. Oleh karena itu, ada ketidaksesuaian dalam pengalihan URI. Saya menyelesaikannya dengan memperbaruiAuthorized Redirect URIs
di Google Developer Console kewww
URL.Ketidakcocokan URI umum lainnya adalah:
http://
di URI Pengalihan Resmi danhttps://
sebagai URL aktual, atau sebaliknyahttp://example.com/
) di URI Pengalihan Resmi dan tidak menggunakan trailing slash (http://example.com
) sebagai URL aktual, atau sebaliknyaBerikut adalah screenshot langkah demi langkah dari Google Developer Console sehingga akan sangat membantu bagi mereka yang mengalami kesulitan untuk menemukan halaman konsol pengembang untuk memperbarui URI redirect.
Berikut ini adalah artikel Google tentang membuat ID proyek dan klien .
sumber
Jika Anda menggunakan tombol javascript Google+ , maka Anda harus menggunakan
postmessage
alih-alih URI yang sebenarnya. Hampir sepanjang hari saya perlu memikirkan hal ini karena dokumen Google tidak dengan jelas menyatakannya untuk beberapa alasan.sumber
Error: invalid_request
origin parameter is required!
$client->setRedirectUri('postmessage');
alih-alih$client->setRedirectUri('http://your.url...');
Dalam aliran apa pun di mana Anda mengambil kode otorisasi di sisi klien, seperti
GoogleAuth.grantOfflineAccess()
API , dan sekarang Anda ingin meneruskan kode ke server Anda, menebusnya, dan menyimpan akses dan menyegarkan token, maka Anda harus menggunakan string literalpostmessage
bukannya redirect_uri.Misalnya, membangun cuplikan di dokumen Ruby :
Satu-satunya dokumentasi Google untuk menyebutkan
postmessage
adalah dokumen masuk Google+ lama ini . Berikut screenshot dan tautan arsip sejak G + ditutup dan tautan ini kemungkinan akan hilang:Benar-benar tidak dapat dimaafkan bahwa halaman doc untuk Akses Offline tidak menyebutkan ini. #Telapak tangan
sumber
postmessage
, tapi saya ingin memberikan keadaan khusus (misalnyagrantOfflineAccess
) kapan peretasan tidak berdokumen gila ini diperlukan untuk saya. : PI tidak ingin itu benar juga. :) Biaya saya sakit kepala berjam-jam.Untuk aplikasi web saya, saya memperbaiki kesalahan saya dengan menulis
sumber
Pastikan untuk memeriksa protokol "http: //" atau "https: //" sebagai protokol cek google juga. Lebih baik menambahkan kedua URL dalam daftar.
sumber
Tampaknya ini agak aneh dan menyebalkan karena tidak ada "satu" solusi di sana. bagi saya http: // localhost: 8000 tidak berhasil tetapi http: // localhost: 8000 / berhasil.
sumber
redirect_uri
harus PERTANDINGAN TEPAT pada konsol pengembang dan dalam aplikasi Anda.Ketika Anda mendaftarkan aplikasi Anda di https://code.google.com/apis/console dan membuat ID Klien, Anda mendapatkan kesempatan untuk menentukan satu atau lebih URI pengalihan. Nilai
redirect_uri
parameter pada URI auth Anda harus sama persis dengan salah satunya.sumber
https://code.google.com/apis/console
tidak berlaku lagiJawaban ini sama dengan jawaban ini Mike , dan jawaban Jeff , kedua set
redirect_uri
untukpostmessage
di sisi client. Saya ingin menambahkan lebih banyak tentang sisi server, dan juga keadaan khusus yang berlaku untuk konfigurasi ini.Stack teknologi
Backend
Paling depan
create-react-app
versi 2.1.5Aliran "Kode" (Khusus untuk Google OAuth2)
Ringkasan: React -> request social auth "code" -> request jwt token untuk mendapatkan status "login" dalam hal server / database backend Anda sendiri.
responseType="code"
untuk mendapatkan kode otorisasi. (bukan token, bukan token akses!)react-google-login
disebutkan di atas.{ "provider": "google-oauth2", "code": "your retrieved code here", "redirect_uri": "postmessage" }
REST_SOCIAL_OAUTH_ABSOLUTE_REDIRECT_URI
,REST_SOCIAL_DOMAIN_FROM_ORIGIN
danREST_SOCIAL_OAUTH_REDIRECT_URI
di Djangosettings.py
tidak perlu . (Mereka adalah konstanta yang digunakan oleh Django REST Social Auth) Singkatnya, Anda tidak perlu mengatur apa pun yang berkaitan dengan redirect url di Django . The"redirect_uri": "postmessage"
di Bereaksi mencukupi frontend. Ini masuk akal karena pekerjaan auth sosial yang harus Anda lakukan di sisi Anda adalah semua permintaan POST gaya Ajax di frontend, tidak mengirimkan bentuk apa pun, jadi sebenarnya tidak ada pengalihan yang terjadi secara default. Itu sebabnya url redirect menjadi tidak berguna jika Anda menggunakan kode + aliran JWT, dan pengaturan url redirect sisi-server tidak berpengaruh.youremailprefix717e248c5b924d60
jika email Anda[email protected]
. Ini menambahkan beberapa string acak untuk membuat nama pengguna yang unik. Ini adalah perilaku default, saya yakin Anda dapat menyesuaikannya dan merasa bebas untuk menggali dokumentasi mereka.Authorization
header Anda dan mengirim permintaan ke backend, backend Django sekarang akan mengenali itu sebagai login, yaitu dikonfirmasi pengguna. Tentu saja, jika token Anda kedaluwarsa, Anda harus menyegarkannya dengan membuat permintaan lain.Ya ampun, saya telah menghabiskan lebih dari 6 jam dan akhirnya berhasil dengan benar! Saya percaya ini adalah pertama kalinya saya melihat
postmessage
hal ini . Siapa pun yang mengerjakanDjango + DRF + JWT + Social Auth + React
kombinasi pasti akan menabrak ini. Saya tidak percaya tidak ada artikel di luar sana yang menyebutkan ini kecuali jawaban di sini. Tapi saya sangat berharap posting ini dapat menghemat banyak waktu jika Anda menggunakan tumpukan Django + Bereaksi.sumber
2015Juli15 - masuk yang berfungsi minggu lalu dengan skrip ini saat masuk
berhenti bekerja dan mulai menyebabkan Kesalahan 400 dengan
Error: redirect_uri_mismatch
dan di bagian DETAILS:
redirect_uri=storagerelay://...
saya menyelesaikannya dengan mengubah ke:
sumber
Daftar periksa:
http
atauhttps
?&
atau&
?/
) atau terbuka?
(CMD/CTRL)+F
, cari kecocokan persis di halaman kredensial. Jika tidak ditemukan maka cari yang hilang.sumber
Dalam kasus saya, jenis Aplikasi kredensial saya adalah "Lainnya". Jadi saya tidak dapat menemukan
Authorized redirect URIs
di halaman kredensial. Tampaknya muncul dalam jenis Aplikasi: "Aplikasi Web". Tetapi Anda dapat mengklikDownload JSON
tombol untuk mendapatkanclient_secret.json
file.Buka file json, dan Anda dapat menemukan parameter seperti ini:
"redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]
. Saya memilih untuk menggunakan http: // localhost dan berfungsi dengan baik untuk saya.sumber
Url redirect sensitif huruf.
Dalam kasus saya, saya menambahkan keduanya: http: // localhost: 5023 / AuthCallback / IndexAsync http: // localhost: 5023 / authcallback / indexasync
sumber
Tidak ada solusi di atas yang berfungsi untuk saya. di bawah itu
ubah url Redirect yang diotorisasi ke - https: // localhost: 44377 / signin-google
Semoga ini bisa membantu seseorang.
sumber
Waspadalah terhadap ekstra
/
di akhir urlhttp://localhost:8000
berbeda darihttp://localhost:8000/
sumber
Pengguna Rails (dari omniauth-google-oauth2 docs):
INGAT: Jangan sertakan trailing "/"
sumber
Jika Anda menggunakan tutorial ini: https://developers.google.com/identity/sign-in/web/server-side-flow maka Anda harus menggunakan "postmessage".
Di GO ini memperbaiki masalah:
sumber
bagi saya itu karena dalam daftar 'URI pengalihan Resmi' saya salah memasukkan
https://developers.google.com/oauthplayground/
bukanhttps://developers.google.com/oauthplayground
(tanpa/
di akhir).sumber
Biarkan saya menyelesaikan jawaban @ Bazyl: dalam pesan yang saya terima, mereka menyebutkan URI
"http://localhost:8080/"
(yang tentu saja, tampaknya merupakan konfigurasi internal google). Saya mengubah URI resmi untuk yang itu"http://localhost:8080/"
,, dan pesan itu tidak muncul lagi ... Dan videonya diunggah ... Dokumentasi APIS SANGAT timpang ... Setiap kali saya memiliki sesuatu yang bekerja dengan google apis, saya cukup merasa "beruntung", tetapi ada kekurangan dokumentasi yang baik tentang hal itu .... :( Ya, saya membuatnya bekerja, tapi saya belum mengerti mengapa itu gagal, atau mengapa itu bekerja ... Hanya ada SATU tempat untuk mengonfirmasi URI di web, dan disalin di client_secrets.json ... Saya tidak mengerti jika ada tempat KETIGA di mana orang harus menulis URI yang sama ... saya juga menemukan tidak hanya dokumentasi tetapi juga Desain GUI Google 'sumber
Siapa pun yang kesulitan menemukan tempat untuk mengatur url redirect di konsol baru: API & Auth -> Kredensial -> ID klien OAuth 2.0 -> Klik tautan untuk menemukan semua url redirect Anda
sumber
Saya perlu membuat ID klien baru di bawah API & Layanan -> Kredensial -> Buat kredensial -> OAuth -> Lainnya
Kemudian saya mengunduh dan menggunakan client_secret.json dengan program baris perintah saya yang mengunggah ke akun youtube saya. Saya mencoba menggunakan ID klien OAuth Web App yang memberi saya kesalahan URI redirect di browser.
sumber
Coba lakukan pemeriksaan ini:
Nikmati :)
sumber
Dalam kasus saya, saya harus memeriksa jenis ID Klien untuk aplikasi web / aplikasi yang diinstal.
aplikasi yang terinstal: http: // localhost [Redirect URIs] Dalam hal ini localhost cukup berfungsi
aplikasi web: Anda perlu nama domain yang valid [Redirect URIs:]
sumber
Yang perlu Anda lakukan adalah kembali ke Konsol Pengembang Anda dan pergi ke API & Auth> Layar Izin dan isi itu. Secara khusus, nama produk.
sumber
Jangan lupa untuk memasukkan path setelah domain dan ip Anda. Dalam kasus saya, saya lupa:
/ oauth2callback
sumber
Saya punya dua permintaan URI di Konsol, http: // xxxxx / client / api / spreadsheet / authredirect dan http: // localhost .
Saya mencoba semua jawaban teratas untuk pertanyaan ini dan mengkonfirmasi bahwa tidak ada satu pun dari mereka yang menjadi masalah saya.
Saya menghapus localhost dari Konsol, memperbarui client_secret.json di proyek saya, dan kesalahan ketidakcocokan hilang.
sumber
Saya memiliki masalah yang sama dengan masuk google, saya akan menarik rambut saya !!! Saya telah memasukkan callback dengan benar di panel Credential di google developer console di sini adalah url redirect saya:
https://www.example.com/signin-google
https://www.example.com/signin-google/
https://www.example.com/oauth2callback
https://www.example.com/oauth2callback/
semuanya tampak baik-baik saja bukan? tetapi masih tidak berfungsi sampai saya menambahkan satu lagi Url magis saya menambahkan signin-google url (yang merupakan default google callback) tanpa www dan masalah terpecahkan.
memperhitungkannya (tergantung domain Anda), Anda mungkin atau mungkin tidak perlu menambahkan keduanya dengan dan tanpa url www
sumber
Saya punya aplikasi frontend dan backend api.
Dari server backend saya, saya menguji dengan menekan google api dan menghadapi kesalahan ini. Sepanjang waktu saya, saya bertanya-tanya mengapa saya harus memberi
redirect_uri
karena ini hanya backend, karena frontend masuk akal.Apa yang saya lakukan adalah memberikan yang berbeda
redirect_uri
(meskipun valid) dari server (dengan asumsi ini hanya placeholder, hanya saja terdaftar di google) tetapi url frontend saya yang membuat kode token berbeda. Jadi ketika saya melewati kode ini dalam pengujian sisi server saya (yang redirect-uri berbeda), saya menghadapi kesalahan ini.Jadi jangan lakukan kesalahan ini. Pastikan frontend Anda
redirect_uri
sama dengan server Anda seperti google menggunakannya untuk memvalidasi keaslian.sumber
Berikut adalah alasan Galat: terjadi masalah redirect_uri_mismatch:
Disarankan menggunakan URL domain
sumber
Caranya adalah dengan memasukkan url redirect yang tepat pada titik pembuatan ID. Saya menemukan bahwa memperbarui url redirect setelah ID dibuat melalui 'Edit' tidak menyelesaikan pekerjaan. Apa yang juga berhasil bagi saya adalah menduplikasi seluruh folder 'vendor' dan menyalinnya ke lokasi yang sama di mana file 'oauth' berada (hanya sampai Anda berhasil membuat token dan kemudian Anda dapat menghapus folder 'vendor' duplikat). Ini karena mencoba menunjuk ke folder vendor melalui '../vendor/autoload' tidak berfungsi untuk saya.
Jadi, hapus ID OAuth Klien Anda yang bermasalah dan coba pendekatan ini, itu akan berhasil.
sumber