我正在尝试通过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模拟社交身份验证的方法 谢谢。