Нужна помощь в использовании функции входа в Google и использовании всплывающего окна с window.open в ReactJS и вызове API из бэкэнда Laravel. Я использовал window.addEventListener для прослушивания «сообщения», и после отправки данных в API затем на внутренней стороне успешно вошел в систему, а затем вернул зарегистрированные данные клиента в форме json, включая uid клиента и токен, срок действия. И я не получил никакого события «сообщения»! И я до сих пор не знаю, как обращаться с API после возвращения. Вот пример данных, возвращаемых API после успешного входа клиента:
Нужна помощь в использовании функции входа в Google и использовании всплывающего окна с window.open в ReactJS и вызове API из бэкэнда Laravel. Я использовал window.addEventListener для прослушивания «сообщения», и после отправки данных в API затем на внутренней стороне успешно вошел в систему, а затем вернул зарегистрированные данные клиента в форме json, включая uid клиента и токен, срок действия. И я не получил никакого события «сообщения»! И я до сих пор не знаю, как обращаться с API после возвращения. Вот пример данных, возвращаемых API после успешного входа клиента: [code]{ "check":true, "uid":"CTdy7qF1733112180"," token":"170|n0FLWWIwJC9XlyVMDf2alHlwW3TSQZKyKItWUAmwcad9a97d", "expiry":1733136280 } [/code] Вот код приложения ReactJS: [code]import { useState } from "react"; import Header from "@layouts/Header"; import Footer from "@layouts/Footer"; import { Container, Row, Col, Form, Button, InputGroup } from "react-bootstrap"; import { Link } from "react-router-dom"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faEye, faEyeSlash } from "@fortawesome/free-solid-svg-icons"; import { Helmet } from "react-helmet"; import useAuthenContext from "@context/AuthenContext"; import axios from "axios";
const validate = () => { let newErrors = {}; if (!formData.email.trim()) newErrors.email = "Email không được để trống!"; if (!formData.password.trim()) newErrors.password = "Mật khẩu không được để trống!"; const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (formData.email && !emailRegex.test(formData.email)) { newErrors.email = "Email không hợp lệ!"; } if (formData.password && formData.password.length < 8) { newErrors.password = "Mật khẩu phải có ít nhất 8 ký tự!"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; };
const handleSubmit = async (e) => { e.preventDefault(); if (validate()) { await login({ email: formData.email, password: formData.password, remember_token: formData.rememberToken }); } else { window.notyf.error("Vui lòng kiểm tra thông tin đăng nhập!"); } };
const handleChange = (e) => { const { id, value } = e.target; setFormData({ ...formData, [id]: value }); };
export default Login; [/code] Код в Laravel Backend, который обрабатывает вход в Google, выглядит следующим образом: [code]public function redirectToAuth(): JsonResponse { return response()->json([ 'check' => true, 'url' => Socialite::driver('google')->stateless()->redirect()->getTargetUrl(), ]); }
public function handleAuthCallback(): JsonResponse { try { $user = Socialite::driver('google')->stateless()->user(); $password = Str::random(8);