我为一个使用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登录。你需要遵循一些简单的步骤来实现它。
你应该遵循这个链接,它有一步一步的方法来实现它。
对于任何有类似问题的人,这是我如何让它工作的:
-
react native fbsdk next
react-native package将从facebook应用程序获取facebookUserId
和authToken
-
将接收到的
facebookUserId
和authToken
数据传递到后端 -
验证
authToken
和facebookUserId
从facebook图形api和获得所需的数据,并保存在dbexports.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); } };