如何将ngrok与Google Oauth结合使用?

时间:2016-10-04 19:20:22

标签: meteor google-oauth2 ngrok

我最近安装了Ngrok,以便在手机上测试我的localhost流星应用程序。 我成功通过ngrok通过隧道访问流星应用程序。 但是,当我尝试登录时,我收到此错误消息:

登录过程显示以下错误消息:

400. That’s an error.

Error: redirect_uri_mismatch

Application: AppName

You can email the developer of this application at: my@emailadress.com

The redirect URI in the request, http://localhost:7123/_oauth/google, 
does not match the ones authorized for the OAuth client.

更新授权的JavaScript来源&将URI重定向到Ngrok转发地址,没有效果。

如何正确使用ngrok与Google Oauth结合使用?

非常感谢任何帮助

3 个答案:

答案 0 :(得分:1)

使用ngrok并将根URL更改为ngrok提供的URL。

ROOT_URL=http:XXXXXXXX.ngrok.io meteor开始流星。

答案 1 :(得分:0)

它尝试使用@RequestMapping(value = "/v1/...", method = RequestMethod.POST) @ResponseStatus(HttpStatus.CREATED) @CrossOrigin public ResponseEntity<?> createRequest(@RequestBody OrderDTO orderdto){ RestTemplate restTemplate = new RestTemplate(); ....... ..... return new ResponseEntity<>(HttpStatus.CREATED); } 而不是更像ngrok的网址,例如:http://localhost:7123/_oauth/google

您可以检查用于运行应用程序的参数和环境变量。

例如,我通常使用

https://fd4fdbbb.ngrok.io/_oauth/google

使用看似如下的bash脚本运行meteor:

ServiceConfiguration.configurations.upsert(
    { service: 'facebook' },
    { 
        $set: {
            appId: process.env.facebookConsumerKey,
            secret: process.env.facebookConsumerSecret,
            loginStyle: 'popup'
        }
    }
);

因此,您可以使用#!/bin/bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm nvm install 4.4.7 IP_ADDRESS=`ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | grep -v '10.0.0.1'` echo "Starting app on: $IP_ADDRESS:3000" # NODE_DEBUG=request \ # facebookOAuthRedirectURL=http://$IP_ADDRESS:3000/_oauth/facebook \ facebookAppName="BlahApp - local dev" \ facebookConsumerKey=12345 \ facebookConsumerSecret=xxxxxx \ facebookOAuthRedirectURL=http://$IP_ADDRESS:3000/_oauth/facebook \ MONGO_URL=mongodb://$IP_ADDRESS:27017/staging-blah-app \ ROOT_URL=http://$IP_ADDRESS:3000 \ BIND_IP=$IP_ADDRESS \ MOBILE_DDP_URL=http://$IP_ADDRESS \ MOBILE_ROOT_URL=http://$IP_ADDRESS \ meteor --port $IP_ADDRESS:3000 --settings development-settings.json

而不是googleOAuthRedirectURL=http://$IP_ADDRESS:3000/_oauth/google

答案 2 :(得分:0)

问题是meteor没有读取环境变量,即使它在客户端被覆盖,服务器也会以错误的回调URL连接到google。

现在为解决方案......我首先确保在杀死应用程序后通过在终端中运行此设置来重置Google服务配置中的设置:

import pymysql

在一个单独的终端中,我开始使用ngrok来生成隧道链接:

meteor reset

产生隧道链接:

./ngrok http 7123

在一个单独的终端中,我通过将其分配到“端口7123”并将“http://adba9b9f.ngrok.io”设置为absoluteUrl来启动我的应用程序:

http://adba9b9f.ngrok.io/ 

要确认已执行此命令,我将其输入浏览器控制台

ROOT_URL=http://adba9b9f.ngrok.io meteor --port 7123

回应:

Meteor.absoluteUrl() 

表示Meteor.absoluteUrl()命令成功。

接下来,我通过“http://adba9b9f.ngrok.io”隧道访问我的应用,然后点击“配置Google按钮”,其中GLADLY注意到授权的JavaScript来源预设为: http://adba9b9f.ngrok.io和 授权重定向URI预设为:http://adba9b9f.ngrok.io/_oauth/google

然后,我使用Google凭据中的详细信息填写了客户端ID和客户端密钥部分,并使用配置Google按钮详细信息中的详细信息更新了Google凭据并保存。

很高兴地说......现在一切都很有效。