Hướng dẫn tạo module đăng nhập bo-blog bằng facebook
Sau một thời gian yên lặng thì hôm nay levis012 đã cho ra mắt module đăng nhập bo-blog bằng nick facebook. Vì 1 số lý do levis012 không đăng bài trên forum nên yêu cầu mình đăng lại, Bạn nào có thắc mắc khi cài module đăng nhập bo-blog bằng facebook thì có thể để lại câu hỏi levis012 sẽ trả lời các bạn.
1.Đầu tiên bạn cần tạo 1 ứng dụng facebook.
Các bạn vào linkhttps://developers.facebook.com/apps để đăng ký và tạo 1 ứng dụng. Sau khi tạo xong bạn sẽ nhận được 2 thông tin sau. App ID/API Key App Secret
2 cái này dùng để config cho ứng dụng của bạn.
2.Tiếp theo sau khi xong các bạn cần download bộ SDK PHP của facebook. Đây là các class để giao tiếp với facebook thông qua app.
Download tại đây https://github.com/facebook/facebook-php-sdk
sau khi download xong các bạn giải nén sẽ được vài file và thư mục src. các bạn tạo 1 folder facebook ngang hàng với file global.php sau đó upload thư mục src ở folder vừa giải nén lên host.
Cấu trúc thư mục sẽ có dạng
3.Bây giờ đến phần sửa code. Đầu tiên mở file global.php và thêm xuống cuối
require 'facebook/src/facebook.php';
$fb_cfg['appId'] = 'xxxxxxxxx';
$fb_cfg['secret'] = 'xxxxxxxxxxx';
$fb_cfg['cookie'] = true;
function vietbb_checkLogin()
{
global $fb_cfg, $token;
$vietbb_facebook = new Facebook($fb_cfg);
$user = $vietbb_facebook->getUser();
if ( $user )
{
try{
$user_profile = $vietbb_facebook->api('/me');
$logoutUrl = $vietbb_facebook->getLogoutUrl(array('next' => 'http://demo.vietboblog.net/facebook/logout.php'));
$res = array(
'id' => $user_profile['id'],
'username' => $user_profile['username'],
'fullname' => $user_profile['name'],
'email' => $user_profile['email'],
'link' => $user_profile['link'],
'logOutUrl' => $logoutUrl,
'logged' => true
);
return $res;
} catch ( FacebookApiException $e ){
$loginUrl = $vietbb_facebook->getLoginUrl(array('scope'=>'email, publish_stream'));
echo "Please login again <a href = \"$logInUrl\">Login to vietboblog demo</a>";
exit(0);
}
}
else
{
$loginUrl = $vietbb_facebook->getLoginUrl(array('scope'=>'email, publish_stream'));
$res = array(
'logInUrl' => $loginUrl,
'logged' => false
);
return $res;
}
}
function vietbb_logOut()
{
global $fb_cfg;
$vietbb_facebook = new Facebook($fb_cfg);
$vietbb_facebook->destroySession();
}
function vietbb_post($message = '')
{
global $fb_cfg; //Su dung bien global
//Khoi tao class facebook
$vietbb_facebook = new Facebook($fb_cfg);
//Lay thong tin nguoi dung
$user_profile = $vietbb_facebook->api('/me');
// Kiem tra va post
if ( $message == '' )
$postid = $vietbb_facebook->api('/me/feed','POST',
array(
'message' => 'Ban '.$user_profile['username'].' Vua tham gia cong dong vietboblog....',
'link' => 'http://demo.vietboblog.net/'
));
else
$postid = $vietbb_facebook->api('/me/feed','POST',
array(
'message' => $message,
'link' => 'http://demo.vietboblog.net/'
));
}
Nhớ sửa lại link web của bạn cho phù hợp, và nội dung message cho phù hợp.
Phần appId và secret các bạn nhớ config lại cho phù hợp với thông số app của bạn.
Tiếp theo mở file login.php thay thế toàn bộ bằng đoạn code sau.
<?php
if ( $_GET['service'] == 'facebook' )
{
include_once("global.php");
unset($vietbb_facebook);
$vietbb_facebook = vietbb_checkLogin();
// Kiem tra xem tai khoan nay da dang nhap chua
if ( $vietbb_facebook['logged'] ) // Neu da dang nhap roi
{
$count_user = $blog->countbyquery("SELECT count(userid) FROM `{$db_prefix}user` WHERE `username` = '{$vietbb_facebook['username']}'");
if ( $count_user == 0 ) // Kiem tra xem da co trong co so du lieu chua, chua co thi them vao
{
vietbb_post();
$maxrecord=$blog->getsinglevalue("{$db_prefix}maxrec");
$currentuserid = $maxrecord['maxuserid']+1;
$username = $vietbb_facebook['username'];
$password = md5(time());
$time = time();
$email = $vietbb_facebook['email'];
$homepage = $vietbb_facebook['link'];
$blog->query("INSERT INTO `{$db_prefix}user` VALUES ('{$currentuserid}', '{$username}', '{$password}', '{$time}', '1', '{$email}', '{$homepage}', '0', NULL, NULL, '0', NULL, NULL, '0', NULL, NULL);");
$blog->query("UPDATE `{$db_prefix}maxrec` SET `maxuserid`=`maxuserid`+1");
$blog->query("UPDATE `{$db_prefix}counter` SET `users`=`users`+1");
}
// Kich hoat che do dang nhap
$username=safe_convert(mystrtolower($vietbb_facebook['username']));
plugin_runphp('loginprocess');
$try=$blog->getbyquery("SELECT * FROM `{$db_prefix}user` WHERE LOWER(username)='{$username}' ");
if (!is_array($try)) {
catcherror ($lnc[166]);
} else {
$userid=$try['userid'];
if ($savecookie==0) {
setcookie ('userid', $userid);
setcookie ('userpsw', $try['userpsw']);
} else {
$savecookielong=3600*24*30;
setcookie ('userid', $userid, time()+$savecookielong);
setcookie ('userpsw', $try['userpsw'], time()+$savecookielong);
}
$redirection=array("{$lnc[163]}|index.php");
if ($try['usergroup']=='2') {
$redirection[]="{$lnc[107]}|admin.php";
$redirection[]="{$lnc[108]}|admin.php?act=edit";
}
catchsuccess ("{$lnc[167]} ".$username, $redirection);
}
}else{ //Neu chua dang nhap thi phai dang nhap
header("Location:" . $vietbb_facebook['logInUrl']);
}
exit(0);
}
$act="login";
define ('isLogin', 1);
require ("index.php");
?>
Tiếp theo mở file
inc/mod_login.php
tìm đoạn code
PHP Code:
if ($job=='logout') {
thêm xuống dưới
PHP Code:
vietbb_logOut();
Như vậy là xong rồi.
Để đăng nhập bằng facebook, các bạn chỉ cần truy cập dạng domain.com/login.php?service=facebook
Các bạn thử xem, có thắc mắc gì vui lòng comment ở dưới levis012 sẽ giúp đỡ.
URL đã cho không được cấu hình Ứng dụng cho phép.: Một hoặc nhiều URL đã cung cấp không được thiết lập Ứng dụng cho phép. URL phải khớp với một trong những URL trang web hoặc URL trang nền hoặc miền phải là miền phụ của một trong những miền của Ứng dụng.
URL đã cho không được cấu hình Ứng dụng cho phép.: Một hoặc nhiều URL đã cung cấp không được thiết lập Ứng dụng cho phép. URL phải khớp với một trong những URL trang web hoặc URL trang nền hoặc miền phải là miền phụ của một trong những miền của Ứng dụng.
Lổi này là bị sao vậy a Nam
Bạn cấu hình trong trang developers facebook như hình này nhé.
Bạn có điền app domain như hình mình đăng ở trên không
Dịch vụ tên miền của VietBoBlog
Sử dụng dịch vụ quốc tế VBB, mang lại cho quý khách:
* Tốc độ đăng ký và kích hoạt nhanh chóng
* Miễn phí tạo Child Nameserver (ns1.yourdomain.com ns2.yourdomain.com)
* Miễn phí Ẩn thông tin đăng ký và quản lý tên miền
* Khóa bảo mật tên miền, ngăn ngừa việc transfer trái phép.