mmanos/laravel-social

为 Laravel 4 提供的社会化登录包。

v1.0.5 2014-11-28 15:12 UTC

This package is not auto-updated.

Last update: 2024-09-24 02:32:02 UTC


README

此包是 Laravel 4 的服务提供程序,用于 Lusitanian/PHPoAuthLib,该库为 PHP 5.3+ 提供了 OAuth 支持,并且非常容易与任何需要 OAuth 客户端的工程项目集成。

此外,您还可以利用可选的控制器和模型,使以下操作变得非常简单:

  • 使用社交提供程序登录
  • 将现有用户记录与社交提供程序连接
  • 使用每个用户的唯一访问令牌对社交提供程序 API 进行请求

支持的服务

有关支持服务的列表,请参阅 Lusitanian/PHPoAuthLib 的文档 此处

通过 Composer 安装

将此添加到您的 composer.json 文件中,在 require 对象中

"mmanos/laravel-social": "dev-master"

然后,运行 composer install 以安装包。

将服务提供程序添加到 app/config/app.php,在 providers 数组内。

'providers' => array(
	// ...
	'Mmanos\Social\SocialServiceProvider',
)

将类别名添加到 app/config/app.php,在 aliases 数组内。

'aliases' => array(
	// ...
	'Social' => 'Mmanos\Social\Facades\Social',
)

配置

将默认配置文件发布到您的应用程序中,以便您可以进行修改。

$ php artisan config:publish mmanos/laravel-social

将服务提供程序凭据添加到已发布的配置文件: app/config/packages/mmanos/laravel-social/config.php

基本用法

获取提供程序的服务类对象。

$service = Social::service('facebook');

可选地,添加一个第二个参数,指定服务需要重定向到的 URL,否则它将重定向到当前 URL。

$service = Social::service('facebook', 'http://example.com');

将用户重定向到提供程序的 OAuth 登录页面。

return Redirect::to((string) $service->getAuthorizationUri());

有关如何与特定提供程序集成的示例,请参阅 此处

使用提供的控制器和模型

为了增加便利性,请使用内置的控制器和模型,轻松登录或连接到社交提供程序账户。

要求

此实现相当具有意见性,并假设您希望允许用户使用现有的社交提供程序账户无缝登录或注册,并将该社交提供程序账户与现有用户记录关联。

它有以下要求:

  • 您有一个具有数值主键的现有用户记录
  • 您正在使用 Laravel 认证系统
  • 您已启用 Laravel 会话系统
  • 您在 config/app.php 文件中定义了 app key,以便 Crypt 类可以使用它来加密访问令牌

迁移

发布并运行此包的数据库迁移。这将创建一个 user_providers 表。

$ php artisan migrate:publish mmanos/laravel-social
$ php artisan migrate

注意:您可以通过更改配置文件中 table 键的值来更改用于存储用户提供程序信息的默认表名。

模型设置

将 SocialTrait 添加到您的 User 模型定义中。

use Mmanos\Social\SocialTrait;

class User extends Eloquent
{
	use SocialTrait;
	
}

社交登录流程

只需创建指向内置控制器的链接以启动登录流程。在用户返回您的网站之前,他们将被重定向到提供程序登录页面。

如果现有用户已与提供程序账户链接,他们将以该用户身份登录。

如果找不到现有用户,将为服务提供商账户创建一个新的用户记录,然后在用户登录之前将其链接到服务提供商账户。

<a href="{{ route('social-login', array('twitter')) }}">
	Log in with Twitter
</a>

要自定义用户登录流程后的跳转位置,请添加 onsuccessonerror 参数。

<a href="{{ route('social-login', array('twitter')) }}?onsuccess=/account&onerror=/login">
	Log in with Twitter
</a>

注意:默认的重定向位置是 referer 标头。否则是 /

连接社交账户流程

如果用户已经登录,您还可以将社交提供商账户关联到现有用户。

<a href="{{ route('social-connect', array('twitter')) }}">
	Connect Your Twitter Account
</a>

注意:此操作也支持 onsuccessonerror 参数。

与用户和提供商一起工作

您可以获取与用户链接的所有提供商。

$providers = Auth::user()->providers;

您可以检查用户是否连接到指定的提供商。

if (Auth::user()->hasProvider('twitter')) {
	//
}

您可以获取用户的单个提供商实例。

$provider = Auth::user()->provider('twitter');

此包为每个用户提供商存储加密后的 access_token 版本。这样,您可以轻松代表用户向提供商服务发起 API 调用。

$result = Auth::user()->provider('twitter')->request('account/verify_credentials.json');

注意:请记住,access_token 有可能过期。您可以通过在控制器中启动重定向到 getConnect 动作来刷新用户的 access_token。

创建用户逻辑

如果您想自定义社交登录流程中创建用户的逻辑,请修改配置文件中的 create_user 键。

'create_user' => function ($data) {
	$user = new User;
	$user->email = array_get($data, 'email');
	$user->password = Hash::make(Str::random());
	$user->location = array_get($data, 'location'); // Only passed by certain providers.
	$user->save();
	
	return $user->id;
},

注意:完成后,请确保返回一个数字主键。

注意:$data 参数中传递的信息是配置文件中每个提供商的 fetch_user_info 函数返回的数据。

提供商用户信息

要自定义您想要从社交提供商账户中检索的数据,请修改配置文件中每个提供商的 fetch_user_info 键。

	'fetch_user_info' => function ($service) {
		$result = json_decode($service->request('account/verify_credentials.json'), true);
		return array(
			'id'         => array_get($result, 'id'),
			'email'      => null,
			'first_name' => array_get(explode(' ', array_get($result, 'name')), 0),
			'last_name'  => array_get(explode(' ', array_get($result, 'name')), 1)
			'location'   => array_get($result, 'location'),
		);
	},

注意:此函数还允许您通过将它们的字段映射到您想要存储在用户记录中的字段,来规范化每个社交提供商返回的用户数据。

新用户验证

您可以将社交登录流程配置为验证社交提供商返回的用户信息。这样,您可以确保获取到所有必要的新用户数据,并且格式正确。

要自定义验证规则,请修改配置文件中的 user_validation 键。

'user_validation' => array(
	'email'      => 'required|email',
	'first_name' => 'required',
	'location'   => 'required',
),

注意:您还可以声明一个闭包函数来创建并返回一个 Validator 实例,以获得更大的灵活性。

社交按钮

此包提供了一些方便的 CSS,允许您创建漂亮的社交按钮。它是为与 Twitter BootstrapFont Awesome 框架一起使用而构建的。

发布资产

发布此包的公共资产。

$ php artisan asset:publish mmanos/laravel-social

包含资产

{{ HTML::style('/packages/mmanos/laravel-social/css/socialbuttons.css') }}

构建按钮

<a href="{{ route('social-login', array('twitter')) }}" class="btn btn-social btn-twitter">
	<i class="fa fa-twitter"></i> Log in with Twitter
</a>
<a href="{{ route('social-login', array('twitter')) }}" class="btn btn-social-icon btn-twitter">
	<i class="fa fa-twitter"></i>
</a>

请参阅此处了解支持的类名列表。