我有一个网站(php,mysql),用户可以通过表格和方式注册到数据库。通过登录表单登录。
或者我有一个Facebook登录按钮,我想让用户:
我目前有以下代码发送上述内容,除了实际将其数据存入/存储在我的数据库中之外:
<?php
session_start();
if(isset($_GET['logout_fb'])){
session_destroy();
}
define('FACEBOOK_SDK_V4_SRC_DIR', '../../inc/lib/fb/src/Facebook/');
require __DIR__ . './../../inc/lib/fb/autoload.php';
use Facebook\FacebookSession;
use Facebook\FacebookRedirectLoginHelper;
use Facebook\FacebookRequest;
use Facebook\FacebookResponse;
use Facebook\FacebookSDKException;
use Facebook\FacebookRequestException;
use Facebook\FacebookAuthorizationException;
use Facebook\GraphObject;
use Facebook\HttpClients\FacebookCurl;
use Facebook\HttpClients\FacebookHttpable;
use Facebook\HttpClients\FacebookCurlHttpClient;
use Facebook\Entities\AccessToken;
use Facebook\GraphUser;
$app_id = 'app_id';
$app_secret = 'app_secret';
FacebookSession::setDefaultApplication($app_id, $app_secret);
// login helper with redirect_uri
$helper = new FacebookRedirectLoginHelper('http://www.test.com/tests/fb_test/facebook-sdk-test.php');
try {
$session = $helper->getSessionFromRedirect();
} catch( FacebookRequestException $ex ) {
// When Facebook returns an error
} catch( Exception $ex ) {
// When validation fails or other local issues
}
// see if we have a session
if ( isset( $session ) ) {
// graph api request for user data
$request = new FacebookRequest( $session, 'GET', '/me' );
$response = $request->execute();
// get response
$graphObject = $response->getGraphObject();
// print data
echo print_r( $graphObject, 1 );
}
else {
// show login url
echo '<a href="' . $helper->getLoginUrl() . '">Login</a>';
}
?>
以上返回以下输出:
Facebook\GraphObject Object ( [backingData:protected] => Array ( [id] => test_id [email] => test@email.co.uk [first_name] => Test [gender] => male [last_name] => Name [link] => https://www.facebook.com/app_scoped_user_id/user_id/ [locale] => en_GB [name] => Test Name [timezone] => 1 [updated_time] => 2015-06-06T13:31:40+0000 [verified] => 1 ) )
如何进一步提升我的申请,以便用户可以:
任何人都可以描述我所说的解决方案。我正在努力理解所需的逻辑,创建这种进入我网站的其他方式。
感谢。
答案 0 :(得分:0)
通常推荐的方法是将(1)user(2)登录方法分开。所以不要思考&#34;如果他们通过Facebook登录,我如何显示用户的个人资料图片?&#34;只是思考&#34;如何显示用户的个人资料图片?&#34;。
例如,您可能有一个&#34;用户&#34;表(包括姓名,用户名等)和&#34; auth&#34;表。如果用户使用用户名/密码注册,那么&#34; auth&#34; table将有一个带有(哈希)密码的行。如果他们使用Facebook登录,那么&#34; auth&#34; table将有一行包含他们的Facebook用户ID和访问令牌。
这两个(或更多)登录方法可以一起使用。例如,他们可能已使用用户名和密码进行了注册。但他们回到您的网站并使用Facebook登录。您只需在&#34; auth&#34;中添加一行即可。用户表,现在他们可以使用密码或 Facebook登录。
那么,我如何将Facebook登录添加到您的网站?
登录后,当用户从Facebook重定向到您的网站时:
/me
以验证它并获取用户的ID auth
表包含此Facebook用户的行,则将其登录(例如,通常按照正常方式创建会话)auth
表格中没有包含Facebook用户的行,则创建一个新的user
行和auth
行(您可能需要显示一个表单并询问他们确认一些细节,如姓名/电子邮件/照片)