我正在尝试使用artdarek/oauth-4包设置facebook登录。重定向只返回一个包含以下url的空白页面:
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是空的,所以它由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包的自述文件中的示例几乎相同。
如何获得正确的url?
发布于 2014-08-17 06:54:32
上面的代码是正确的,除了我需要在
$fb = OAuth::consumer('Facebook');所以这就变成了
$fb = OAuth::consumer( 'Facebook', 'http://www.contractorsherpa.com/facebook/' );您要在该url中引用的页面是您在路由中发布的页面。别忘了后面的斜杠。$code将添加在斜杠后面,这将触发if语句:
if(!empty($code))https://stackoverflow.com/questions/25343834
复制相似问题