Saya menghantar pengambilan daripada React to Express untuk mengesahkan dengan Google, tetapi akses saya disekat oleh ralat CORS. Saya mengubah hala permintaan POST daripada React ke URL Google untuk pengesahan. Saya cuba menggunakan cors dalam aplikasi Express tetapi masih mendapat ralat yang sama. kerana mendapatkan
const handleClick = (e) => { fetch('http://localhost:8000/api/mail/login', { method: 'POST' }) .then(res => res.text()) }
Menggunakan kor dalam aplikasi Express.js
app.use(cors())
Cuba ubah hala ke Pengesahan Google
const oauth2Client = new google.auth.OAuth2( process.env.CLIENT_ID, process.env.CLIENT_SECRET, process.env.REDIRECT_URI ) const url = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: process.env.SCOPE }) const gmail = google.gmail({ version: 'v1', auth: oauth2Client }) router.post('/login', (req, res, next) => { res.redirect(url) })
Ralat: Mengakses "https://accounts.google .com/o/oauth2/v2/auth?access_type=offline&scope=https%3A%2F%2Fmail.google.com%2F&response_type=code&client_id=727520060136" untuk pengekstrakan - ngpfsfd42llfc29ttvd42 apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8000' (dilencongkan daripada 'http://localhost:8000/api/mail/login') daripada asal 'http://localhost:3000' telah menjadi Dasar CORS Menyekat: Pengepala 'Access-Control-Allow-Origin' tidak wujud pada sumber yang diminta. Jika respons legap memenuhi keperluan anda, tetapkan mod permintaan kepada "no-cors" untuk mendapatkan sumber dengan CORS dilumpuhkan.
Aliran pengesahan mesti berlaku dalam konteks penyemakan imbas yang boleh dilihat, tanpa menggunakan
fetch
permintaan. Dalam erti kata lain: anda mesti menavigasi tab semasa anda ke (atau membuka tab baharu) http://localhost:8000/api/mail/login, yang akan diubah hala ke https:// accounts.google. com/o/oauth2/v2/auth?... dan halaman menjadi kelihatan. Pengguna kini mesti berinteraksi dengan halaman untuk memilih/mengesahkan akaun Google mereka, selepas itu mereka akan diubah hala ke halaman pada pelayan anda dengan kod kebenaran dalam URL (contohnya, kod http://localhost:8000/callback? =...) dan pelayan anda mesti menukar kod kebenaran untuk token akses melalui panggilan pelayan ke pelayan.Tiada permintaan yang dibuat dengan cara ini adalah silang asal, jadi CORS tidak terlibat sama sekali.
Anda memerlukan borang log masuk yang serupa, bukan fungsi
handleClick