在快速节点中使用Twitter模拟社交身份验证错误:连接ECONNREFUSED

时间:2019-02-26 18:44:35

标签: javascript express twitter mocking social-authentication

我正在尝试通过Twitter模拟社交身份验证,但是我遇到了一个奇怪的错误!

这是我在做什么:

it("should redirect a user to profile page with data", done => {
    nock("https://api.twitter.com/")
      .filteringPath(() => "/")
      .persist()
      .post("/")
      .reply(302, undefined, {
        Location: `/api/v1/profile/${dummyUser.username}`
      })
      .log(console.log);
    chai
      .request(app)
      .get("/api/v1/auth/twitter")
      .end((err, res) => {
        expect(res.redirect).to.be.equals(true);
        expect(res.status).to.be.equal(302);
        expect(res.header.location).to.be.equals(
          `/api/v1/profile/${dummyUser.username}`
        );
        done();
      });

但是当尝试连接到Twitter时,出现此错误:

  

匹配https://api.twitter.com:443/与POST   https://api.twitter.com:443/:是真实的来自身份验证的消息无法获取   请求令牌===== {错误:连接ECONNREFUSED 127.0.0.1:80       在TCPConnectWrap.afterConnect上[完整完成](net.js:1117:14)errno:'ECONNREFUSED',代码:'ECONNREFUSED',系统调用:'connect',
  地址:“ 127.0.0.1”,端口:80}错误:连接ECONNREFUSED   127.0.0.1:80

我不知道它来自哪里,也许从请求生命周期开始。

这是我的/auth/twitter and my callback处理程序

authRouters.get("/auth/twitter", passportTwitter.authenticate("twitter"));
authRouters.get(
  "/auth/twitter/callback",
  passportTwitter.authenticate("twitter", {
    failureRedirect: "/login",
    session: false
  }),
  (req, res) => {
    res.redirect(`/api/v1/profile/${req.user.username}`);
  }
);

以及我的authRouter的样子:

import dotenv from "dotenv";
import passport from "passport";
import twitterStrategy from "passport-twitter";
import createUserFromSocial from "./createUserFromSocial";

dotenv.config();

const TwitterStrategy = twitterStrategy.Strategy;
passport.use(
  new TwitterStrategy(
    {
      consumerKey: process.env.TWITTER_CLIENT_ID,
      consumerSecret: process.env.TWITTER_CLIENT_SECRET,
      callbackURL: "http://localhost:3000/api/v1/auth/twitter/callback",
      passReqToCallback: true
    },
    async (request, accessToken, refreshToken, profile, done) => {
      const user = await createUserFromSocial(profile);
      return user
        ? done(null, user)
        : done(new Error("An error occurs , please try again later"));
    }
  )
);

export default passport;

有关如何解决该错误的任何帮助?? 有没有更好的通过Twitter模拟社交身份验证的方法 谢谢。

0 个答案:

没有答案