我已经添加
"laravel/socialite": "~2.0"
Run Code Online (Sandbox Code Playgroud)
作为作曲家依赖项,我已经在我的中添加了服务提供者,config/app.php就像这样
'providers' => [
// more providers
'Laravel\Socialite\SocialiteServiceProvider'
]
Run Code Online (Sandbox Code Playgroud)
然后,当我访问任何应用程序路由时,我遇到了此Class 'Laravel\Socialite\SocialiteServiceProvider' not found异常。
看看我的,vendor/composer/autoload_psr4.php我发现没有社交名流映射 - 我跑过composer update不止一次composer dump-autoload。
怎么了?
Laravel Socialite有一个“无状态”模式,禁止将任何内容存储到会话中。从源代码的读取来看,它并没有做任何不同的事情——它只是不存储或检索这些值。
作为其中的一部分,它假设OAuth 状态始终有效。
检查这一点是Twitter 登录文档告诉我们要做的事情之一。
所以我想知道使用社交名流的无状态模式可能会产生什么样的安全影响。
如果问题很严重,对于作为无状态 API 运行的应用程序,会有什么样的解决方法?我可以将内容存储在 Redis 存储中,但我不确定如何将任何信息与当前用户联系起来。例如,通过重新实现 Socialite 的功能,我可以将状态存储在缓存中,并以用户 IP 和浏览器指纹的一些哈希值作为键控。但这看起来非常混乱。
我最近实现了Laravel Socialite让用户可以使用他们的 Google+ 帐户登录。一切似乎都在工作,但我遇到的一个问题是,在我第一次在浏览器中登录后,如果我注销然后重新登录,我将无法切换到其他 Google 帐户。执行以下代码后在 LoginController 中,它会自动(全部在一个操作中)使用我的 Google 帐户登录我并将我重定向回我的站点,而不给我选择其他 Google 帐户的选项。
public function redirectToProvider()
{
return Socialite::driver('google')->redirect();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法强制用户每次明确选择他们希望登录的帐户?
我一直在使用 Socilte 包进行用户登录,我使用facebook、google、twiter和github API。除了谷歌API 之外,所有其他 API 都运行良好,从谷歌返回时显示错误。
HTTP 错误 403 - 禁止
Web 服务器被配置为不列出此目录的内容,或者您没有足够的权限访问该资源。
这是我的回调函数,实际上它没有到达这个回调函数:
public function handleGoogleCallback()
{
$user = Socialite::driver('google')->stateless()->user();
}
Run Code Online (Sandbox Code Playgroud) 我最近将我的应用程序移至实时服务器中。
问题是 laravel 社会名流停止工作,下面是解释:
我点击 google 登录并选择电子邮件后,在回调时发生这种情况:
InvalidStateException on Abstract.php on line 200.
为了解决这个问题,我使用了stateless(),现在新的错误是:
Client error: `POST https://www.googleapis.com/oauth2/v4/token` resulted in a `400 Bad Request` response: { "error": "invalid_request", "error_description": "Missing required parameter: code" }
以下是我已经尝试过的事情列表:
1-在 Google 网站中,我更新了 google apiurl并更新callback url为新的实时域地址:
http://www.domain-name.com以及http://www.domain-name.com/login/google/callback
2-我修改了 config/session.php 文件,如下所示:
'domain' => env('SESSION_DOMAIN', 'www.domain-name.com'),
3-我的存储文件夹已经拥有这样的权限:
drwxrwxr-x 5 root www-data 4096 Jun 24 18:30 storage
4-我更改了vendor\laravel\socialite\src\Two\GoogleProvider.php文件并删除了“配置文件”,现在它看起来像这样:
protected $scopes = [
'openid',
'email',
];
Run Code Online (Sandbox Code Playgroud)
5- 我多次使用php …
exception laravel google-oauth laravel-socialite laravel-5.8
我已经使用 Laravel 5.4 和 socialite 3.0 在我的 Web 应用程序上进行社交登录。但是现在我收到一个错误Legacy People API has not been used in project xxx。然后我对socialite package的一个核心文件做了一些修改。/vendor/laravel/socialite/src/Two/GoogleProvider.php 第 61 行:替换https://www.googleapis.com/plus/v1/people/me?通过https://www.googleapis.com/oauth2/v3/userinfo?
并使用以下代码更新 mapUserToObject 函数:
protected function mapUserToObject(array $user)
{
$user['id'] = Arr::get($user, 'sub');
$user['verified_email'] = Arr::get($user, 'email_verified');
$user['link'] = Arr::get($user, 'profile');
return (new User)->setRaw($user)->map([
'id' => Arr::get($user, 'sub'),
'nickname' => Arr::get($user, 'nickname'),
'name' => Arr::get($user, 'name'),
'email' => Arr::get($user, 'email'),
'avatar' => $avatarUrl = Arr::get($user, 'picture'),
'avatar_original' => $avatarUrl,
]);
}
Run Code Online (Sandbox Code Playgroud) 我需要你的帮助。
我用 Laravel 制作了一个 API,用 FLutter 制作了一个 APP。
现在我想让谷歌登录。
在浏览器或休息客户端,如 Insomnia、Postman 或类似的工作正常。这是因为系统向我显示了一个谷歌页面,我必须写下我想登录的电子邮件或谷歌用户,然后显示另一个页面来写密码。最后,所有返回到 APIS 回调端点,显示数据(令牌等)。
但是,当我从我的 flutter 应用程序中执行此操作时,我需要指示用户帐户的第一个 google 页面会像字符串响应一样发送(此字符串响应是 HTML。我认为是我们选择或帐户上的 google 页面中的 HTML) .
如何显示此页面并获得回复?
注意:像flutter_inappbrowser这样的 flutter 插件对我来说没有用,因为这个插件需要一个 URL 并显示它。当我使用flutter 的 http.get时,我得到了字符串上的 HTML 。
我在生产环境中使用 Laravel Socialite 的 Google 身份验证时遇到问题。错误与此帖子中的错误相同:
Laravel Socialite 无法在实时服务器上运行,只能在本地计算机上运行
但我有一个 Apache 服务器,经过多次尝试,我还没有找到解决方案。
编辑:
客户端错误:POST“ https://www.googleapis.com/oauth2/v4/token ”导致“400 Bad Request”响应:
{
"error": "invalid_request",
"error_description": "Missing required parameter: code"
}
Run Code Online (Sandbox Code Playgroud) 我在 Laravel 中使用 Socialite 实现了 Google 登录。我使用的示例仅包含用户的姓名、google_id、电子邮件和个人资料图片。有没有办法从 Google 回调中获取电话号码?或者它甚至包含这个数字?这是处理回调的函数:
public function handleProviderCallback()
{
try {
$user = Socialite::driver('google')->user();
} catch (\Exception $e) {
return redirect('/login');
}
// check if they're an existing user
$existingUser = User::where('email', $user->email)->first();
if($existingUser){
// log them in
auth()->login($existingUser, true);
} else {
// create a new user
$newUser = new User;
$newUser->name = $user->name;
$newUser->email = $user->email;
$newUser->google_id = $user->id;
$newUser->avatar = $user->avatar;
$newUser->avatar_original = $user->avatar_original;
$newUser->save();
auth()->login($newUser, true);
}
return redirect()->to('/');
}
Run Code Online (Sandbox Code Playgroud) 我有一个使用 facebook 登录的 laravel 项目。但经过几天的测试,当我去路线时,它说Sorry, something went wrong.。我没有触摸或修改我的代码以及我的 Facebook 开发者帐户中的应用程序。有人能告诉我发生了什么事吗?
这是我的控制器
public function redirectToProvider(){
$facebookScope = [
'pages_manage_posts',
'pages_read_engagement',
'instagram_basic',
'pages_show_list',
'manage_pages',
'publish_to_groups',
'groups_access_member_info',
];
return Socialite::driver('facebook')->scopes($facebookScope)->redirect();
}
public function facebook(){
try {
$user = Socialite::driver('facebook')->stateless()->user();
// dd($user);
// $this->getPages($user);
$this->getGroups($user);
} catch (\Exception $e) {
return response()->json($e);
}
}
Run Code Online (Sandbox Code Playgroud)
路线
Route::get('/fb','FacebookController@redirectToProvider');
Route::get('/facebookAuth','FacebookController@facebook');
Run Code Online (Sandbox Code Playgroud)
结果是什么样的
拉拉维尔版本:6.2
名媛版:^4.4
更新:如果我删除所有范围,我可以成功登录并获取凭据和令牌。但为什么示波器不起作用?
laravel ×10
php ×4
laravel-5 ×2
composer-php ×1
exception ×1
facebook ×1
flutter ×1
google-api ×1
google-oauth ×1
laravel-5.8 ×1
laravel-7 ×1
oauth ×1
security ×1