use*_*337 0 facebook oauth-2.0 laravel laravel-4
我使用laravel-oauth2包为Laravel 4设置Facebook登录.我正在使用这里看到的包:https: //github.com/madewithlove/laravel-oauth2
当运行控制登录的页面,public/oauth/facebook时,Facebook提示正常,但当我点击"接受"时,该页面会出现以下错误:
ErrorException
Argument 1 passed to OAuth2\Provider\Facebook::get_user_info() must be an instance of OAuth2\Token\Token_Access, instance of OAuth2\Token_Access given, called in /Applications/MAMP/htdocs/crowdsets/laravel-master/app/controllers/Oauth2Controller.php on line 36 and defined
Run Code Online (Sandbox Code Playgroud)
它指向 /vendor/taylorotwell/laravel-oauth2/src/OAuth2/Provider/Facebook.php: 26
get_user_info()Facebook.php中的功能如下所示:
public function get_user_info(Token_Access $token)
{
$url = 'https://graph.facebook.com/me?'.http_build_query(array(
'access_token' => $token->access_token,
));
$user = json_decode(file_get_contents($url));
// Create a response from the request
return array(
'uid' => $user->id,
'nickname' => $user->username,
'name' => $user->name,
'email' => $user->email,
'location' => $user->hometown->name,
'description' => $user->bio,
'image' => 'https://graph.facebook.com/me/picture?type=normal&access_token='.$token->access_token,
'urls' => array(
'Facebook' => $user->link,
),
);
}
Run Code Online (Sandbox Code Playgroud)
我的Oauth2Controller.php文件如下所示:
<?php
use OAuth2\OAuth2;
use OAuth2\Token_Access;
use OAuth2\Exception as OAuth2_Exception;
class Oauth2Controller extends BaseController
{
public function getIndex($provider) {
$provider = OAuth2::provider($provider, array(
'id' => '****************',
'secret' => '********************',
));
if(! isset($_GET['code'])) {
return $provider->authorize();
}
else
{
// Howzit?
try
{
$params = $provider->access($_GET['code']);
$token = new Token_Access(array(
'access_token' => $params->access_token
));
$user = $provider->get_user_info($token);
// Here you should use this information to A) look for a user B) help a new user sign up with existing data.
// If you store it all in a cookie and redirect to a registration page this is crazy-simple.
echo "<pre>";
var_dump($user);
}
catch (OAuth2_Exception $e)
{
show_error('That didnt work: '.$e);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么它会给我这个错误,因为我遵循了文档和教程.感谢您帮助解决此问题.
我研究了包的源代码,它似乎是Facebook提供商的错误(实际上大多数提供商)
例如,在Facebook提供商的开头,它执行此操作:
<?php
use OAuth2\Token\Token_Access;
Run Code Online (Sandbox Code Playgroud)
OAuth2\Token命名空间中实际上没有类.但是,OAuth2名称空间中有一个.所以用上面的值替换上面的值
<?php
use OAuth2\Token_Access;
Run Code Online (Sandbox Code Playgroud)
应该修复你的错误.您应该为所有提供商执行此操作.
PSR命名空间标准规定了下划线到目录的映射.因此OAuth\Token_Access通常会在./OAuth/Token/Access.php文件中查找类
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |