Tôi cũng đã tự hỏi cách triển khai đăng nhập bên máy chủ với HWIOAuthBundle. Tôi không tìm thấy bất kỳ giải pháp nào trên web, vì vậy tôi đã mã hóa chức năng dựa trên các gợi ý tôi đã đọc trên mạng. Về cơ bản, bạn phải:
- xác thực người dùng trên ứng dụng của bạn
- làm một http request đến máy chủ của bạn với các dấu hiệu Facebook.
- ont phía máy chủ, kiểm tra xem mã thông báo có dành cho ứng dụng Facebook của bạn và truy xuất ID Facebook của người dùng hay không.
- Đưa người dùng của bạn từ DB dựa trên ID đã tìm nạp.
Dưới đây là bộ điều khiển Symfony tôi:
public function getSecurityFbAction($token)
{
// Get the token's FB app info.
@$tokenAppResp = file_get_contents('https://graph.facebook.com/app/?access_token='.$token);
if (!$tokenAppResp) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Make sure it's the correct app.
$tokenApp = json_decode($tokenAppResp, true);
if (!$tokenApp || !isset($tokenApp['id']) || $tokenApp['id'] != $this->container->getParameter('oauth.facebook.id')) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Get the token's FB user info.
@$tokenUserResp = file_get_contents('https://graph.facebook.com/me/?access_token='.$token);
if (!$tokenUserResp) {
throw new AccessDeniedHttpException('Bad credentials.');
}
// Try to fetch user by it's token ID, create it otherwise.
$tokenUser = json_decode($tokenUserResp, true);
if (!$tokenUser || !isset($tokenUser['id'])) {
throw new AccessDeniedHttpException('Bad credentials.');
}
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->findUserBy(array('facebookId' => $tokenUser['id']));
if (!$user) {
// Create user and store its facebookID.
}
// Return the user's JSON web token for future app<->server communications.
}
Tôi ném Symfony \ Component \ HttpKernel \ Exception \ AccessDeniedHttpException ngoại lệ để xử lý lỗi đăng nhập vào ứng dụng của tôi.
Tất nhiên, bạn thực sự nên sử dụng http s vì bạn sẽ trao đổi thông tin hợp lý.
Tôi không biết đó là cách tốt nhất để làm điều đó nhưng nó hoạt động tốt. Hy vọng điều đó sẽ hữu ích!
Nguồn
2015-09-12 17:40:33
Hiện đang xem xét cùng một vấn đề chính xác - bạn đã giải quyết vấn đề này chưa? Nếu vậy, làm cách nào bạn giải quyết vấn đề này? Không thể tìm thấy bất cứ điều gì ở bất cứ đâu – iLikeBreakfast
Đúng. Không ai biết nó hoạt động như thế nào. Ý tôi là, bạn có thể dễ dàng làm cơ sở dữ liệu auth và từ đó bạn vàng. Nhưng đó là cách quá phức tạp để làm bất cứ điều gì tùy chỉnh (như LDAP khi liên kết vô danh không được phép). Và nó thực sự buồn vì mọi thứ khác về khung công tác đều đẹp. – DinoAmino
Điều này là do thông số "mã" được cho là mã ủy quyền không phải mã thông báo truy cập ... Mã thông báo truy cập thực sự sẽ là phản hồi cho yêu cầu này. Nhưng tôi cũng bị mắc kẹt, tôi muốn nhận mã ủy quyền từ giao diện người dùng để tôi có thể quay lại quy trình HWIOauth. – TrtG