首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用谷歌OAuth 2.0注册谷歌账户

使用谷歌OAuth 2.0注册谷歌账户
EN

Stack Overflow用户
提问于 2021-11-14 01:22:43
回答 1查看 105关注 0票数 0

我尝试使用谷歌OAuth 2.0认证策略来注册,在我遵循了所有的过程后,谷歌登录页面没有出现,在我的控制台没有错误,密钥很好地导入了什么课程。我使用react js和Nodejs作为后端(我不想使用react谷歌OAuth 2.0组件),我希望所有的东西都在后端。

我的开发者控制台详细信息

授权的JavaScript源URI :http://localhost:5000

授权重定向URI:fileindex.js-http://localhost:5000/auth/google/callback

代码语言:javascript
运行
复制
const passport=require('passport')
const User=require("../mongodb/schema/userSchema")
const googleStrategy=require("./googleStrategy")
const signUpStrategy=require("./signUpStrategy")
const loginStrategy=require("./loginStrategy")

passport.serializeUser((user,done)=>done(null,user.id))
passport.deserializeUser((id,done)=>{
    User.findById(id,(err,user)=>{
        if(err){return done(err)}
        done(null,user)
    })
    //return done(null,getUserById(id))
})


passport.use("local-signUp",signUpStrategy)
passport.use("local-login",loginStrategy)
passport.use("google-signUp",googleStrategy)


module.exports=passport

googleStrategy.js-file

代码语言:javascript
运行
复制
//const  GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
const GoogleStrategy = require( 'passport-google-oauth2' ).Strategy;
const keys = require("./keys")

/*
console.log( keys.GOOGLE.clientID)
console.log( keys.GOOGLE.clientSecret)
*/

//http://localhost:5000/auth/google/callback
//   proxy: true
const googleLocalStrategy=new GoogleStrategy({
    clientID: keys.GOOGLE.clientID,
    clientSecret: keys.GOOGLE.clientSecret,
    callbackURL: "http://localhost:5000/auth/google/callback",
    passReqToCallback   : true,
    proxy: true
 
  },
  function(token, tokenSecret, profile, done) {
     console.log(profile)
     console.log(token)
     console.log(tokenSecret)
     console.log("tokenSecret")
     return done(err, profile);
  }
)



module.exports=googleLocalStrategy;

account.js-file

代码语言:javascript
运行
复制
router.get("/auth/google",passport.authenticate("google-signUp",{
    scope:  [ 'email', 'profile' ]
}))

router.get("/auth/google/callback",(req, res, next)=>{
    passport.authenticate("google-signUp",(err, user, info) =>{
        if (err) {
            return res.status(400).json({express:err})
        }
       
            return res.status(200).json({express:user})
    
    })(req, res, next)
})

Login.js-来自reactjs的文件

代码语言:javascript
运行
复制
import React,{useState} from 'react';
import axios from 'axios'
import {useHistory } from "react-router-dom";


function Login(){
    const history=useHistory()
    const [eventInfo,setEventInfo]=useState({password:'',email:''});
    const  {password,email}=eventInfo
    const [error,setError]=useState('')

    const handleChange=(event)=>{
        const {name,value}=event.target
        setEventInfo({...eventInfo,[name]:value})
    }
    const googleSignUp=async ()=>{
        const res=await axios.get('/auth/google',{
        }).then((res)=>{
       
        })
        .catch((error)=>{
           // console.log(error.response.data.express)
           
        })
    }
    const onSubmit=async (e)=>{
        e.preventDefault();
        const formData=new FormData();
        formData.append('password',password);
        formData.append('email',email);
        try{
            const res=await axios.post('/login',formData,{
                headers:{
                    'Content-Type':'multipart/form-data'
                }
            }).then((res)=>{
                history.push("/home/"+res.data.express.id)
            })
            .catch((error)=>{
                console.log(error.response.data.express)
                //setError(error.response.data.express)
            })

            const{home}=res.data          
            history.push(home)
        }
        catch(err){
            console.log(err)
        }
    }



    return(
        <div>
              {error?error:""}
            <form  onSubmit={onSubmit}  encType="multipart/form-data">
            <div>
            <input type="email" placeholder="name@.com" name="email" onChange={handleChange} required></input>
            </div>
            <div>
            <input type="password" placeholder="passWord ..." name="password" onChange={handleChange} required></input>
            </div>
            <button>login</button> 
            </form>
            <a href="/auth/google" onClick={()=>{googleSignUp()}}>google</a>
        </div>
    )
}
export default Login;
EN

回答 1

Stack Overflow用户

发布于 2021-11-30 03:24:11

代码使用不起作用,因为我需要访问后端服务器本地主机才能使用google路由,而不是react,所以我所做的是引入了一个按钮,当您单击它时,该按钮具有一个功能,该功能将react本地主机更改为后端本地主机,并削减到所需的路由(google路由)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69959573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档