我正在尝试使用artdarek / oauth-4软件包设置facebook登录。重定向只返回一个空白页面,其中包含以下网址:
https://www.facebook.com/dialog/oauth?type=web_server&client_id=1423706434575595&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2FcontractorSherpa%2Fpublic%2Ffacebook&response_type=code&scope=email+read_friendlists+user_online_presence
我使用的是Laravel 4.2.4
路线:
Route::get('/facebook', 'RegistrationController@loginWithFacebook');
RegistrationController:
Public function loginWithFacebook() {
$code = Input::get('code');
// get fb service
$fb = OAuth::consumer('Facebook');
//check for valid code
// if empty provide user data
if ( !empty($code)){
$token = $fb->requestAccessToken($code);
//send a request with it
$result = json_decode( $fb->request('/me'), true);
if (!empty($token)) {
try{
$user = Sentry::findUserByLogin($result['email']);
Sentry::login($user, false);
return Redirect::to('contractors/dashboard');
}
catch (Cartalyst\Sentry\Users\UsersNotFoundException $e)
{
$user = Sentry::register(array(
'activated' => 1,
'email' => $result['email'],
'password' => $result['password'],
'first_name' => $result['firstname'],
'last_name' => $result['lastname'],
));
$group = Sentry::findGroupByName($data['contractor']);
$user->addGroup($usergroup);
Sentry::login($user, false);
return Redirect::to('contractors/dashboard');
}
}
}
else {
//get fb authorization
$url = $fb->getAuthorizationUri();
// return to facebook login url
return Redirect::to((string)$url);
}
}
在我的例子中,$ code为null,因此else语句触发。
我尝试了dd($ url)并得到了这个回复:
object(OAuth\Common\Http\Uri\Uri)#368 (10) { ["scheme":"OAuth\Common\Http\Uri\Uri":private]=> string(5) "https" ["userInfo":"OAuth\Common\Http\Uri\Uri":private]=> string(0) "" ["rawUserInfo":"OAuth\Common\Http\Uri\Uri":private]=> string(0) "" ["host":"OAuth\Common\Http\Uri\Uri":private]=> string(16) "www.facebook.com" ["port":"OAuth\Common\Http\Uri\Uri":private]=> int(443) ["path":"OAuth\Common\Http\Uri\Uri":private]=> string(13) "/dialog/oauth" ["query":"OAuth\Common\Http\Uri\Uri":private]=> string(193) "type=web_server&client_id=1423706434575595&redirect_uri=http%3A%2F%2Flocalhost%3A8888%2FcontractorSherpa%2Fpublic%2Ffacebook&response_type=code&scope=email+read_friendlists+user_online_presence" ["fragment":"OAuth\Common\Http\Uri\Uri":private]=> string(0) "" ["explicitPortSpecified":"OAuth\Common\Http\Uri\Uri":private]=> bool(false) ["explicitTrailingHostSlash":"OAuth\Common\Http\Uri\Uri":private]=> bool(false) }
虽然我添加了几行代码来说明Sentry auth,但我的代码几乎与artdarek包的自述文件中的示例相同。
如何获取正确的网址?
答案 0 :(得分:1)
上面的代码是正确的,除了我需要在
中专门定义路线$fb = OAuth::consumer('Facebook');
这样就变成了
$fb = OAuth::consumer( 'Facebook', 'http://www.contractorsherpa.com/facebook/' );
您要在该网址中引用的网页是您在路线中发布的网页。不要忘记尾随斜线。在斜杠之后添加$ code,然后触发if语句:
if(!empty($code))