使用facebook node js api注册/登录



我为一个使用react-native构建的移动应用程序构建了一个api后端。移动开发者提供了一个json数据文件,数据格式如下:

{
"firstName": "John",
"imageURL": "https:link-to-image.com/file.jpg",
"lastName": "Joe",
"linkURL": null,
"middleName": null,
"name": "John Doe",
"userID": "1234567890"
}

他在react-native中使用react native fbsdk next从facebook获取用户信息。

我设置了以下路由:

auth.js

router.post(
"/facebook/signup",
[
body("facebookUserId")
.not()
.isEmpty()
.withMessage("Facebook user id is required"),
body("name").not().isEmpty().withMessage("Name is required"),
],
controller.userRegisterWithFacebook
);
router.post(
"/facebook/login",
[
body("facebookUserId")
.not()
.isEmpty()
.withMessage("Facebook user id is required"),
],
controller.loginWithFacebook
);

我的控制器:

exports.userRegisterWithFacebook = async (req, res, next) => {
const { facebookUserId, name } = req.body;
try {
validateRequest(req);
const user = await User.findOne({ facebookUserId: facebookUserId });
if (user) {
res
.status(422)
.json({ message: "User already registered. Please login." });
}
const newUser = new User({
name: name,
facebookUserId: facebookUserId,
});
await newUser.save();
res.status(200).json({
message: "User registered successfully with facebook."
});
} catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
};
exports.loginWithFacebook = async (req, res, next) => {
const { facebookUserId } = req.body;
try {
validateRequest(req);
const user = await User.findOne({ facebookUserId: facebookUserId });
if (!user) {
res.status(422).json({ message: "User not found" });
}
const token = await jwt.sign(
{
facebookUserId: user.facebookUserId,
userId: user._id.toString(),
},
process.env.SECRET_KEY,
{
expiresIn: "1h",
}
);
res.status(200).json({
message: "Logged in success",
token: token,
userData: {
...user._doc,
password: null,
_id: user._id.toString(),
},
});
} catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
};

但我不太确定这是否是在Node.js api中为移动应用程序实现facebook登录的正确方式。

如果有人弄清楚了路线和所需的参数,就可以利用假数据。用Node.js后端实现手机应用的facebook登录的最佳方式是什么?

但我不太确定这是否是正确的实现方式使用nodejs API登录Facebook。

是的,这不是使用FB登录的正确方式。你可以用OAuth来做。有几个包可以实现它。

您正在做的是使用Facebook id的本地认证。这不是facebook登录。你需要遵循一些简单的步骤来实现它。

你应该遵循这个链接,它有一步一步的方法来实现它。

对于任何有类似问题的人,这是我如何让它工作的:

  1. react native fbsdk nextreact-native package将从facebook应用程序获取facebookUserIdauthToken

  2. 将接收到的facebookUserIdauthToken数据传递到后端

  3. 验证authTokenfacebookUserId从facebook图形api和获得所需的数据,并保存在db

    exports.userRegisterWithFacebook = async (req, res, next) => {
    const { facebookUserId, authToken } = req.body;
    try {
    validateRequest(req);
    const user = await User.findOne({ facebookUserId: facebookUserId });
    if (user) {
    res
    .status(422)
    .json({ message: "User already registered. Please login." });
    }
    let response = await axios.get(
    `https://graph.facebook.com/${facebookUserId}? 
    fields=id,name,email,picture&access_token=${authToken}`
    );
    if (response.status !== 200) {
    res.status(422).json({ message: "Invalid facebook user id or token" });
    }
    const newUser = new User({
    facebookUserId: response.data.id,
    name: response.data.name,
    email: response.data.email,
    profileImg: response.data.picture.data.url,
    });
    await newUser.save();
    res.status(200).json({
    message: "User registered successfully with facebook.",
    });
    } catch (err) {
    if (!err.statusCode) {
    err.statusCode = 500;
    }
    next(err);
    }
    };
    

最新更新