navneetrai / laravel-submitter
基于OAuth的身份验证器和Laravel 5.2的文件提交器
Requires
- php: >=7.0
- facebook/graph-sdk: ^5.4
- google/apiclient: 1.1.*
- lusitanian/oauth: ~0.3
Requires (Dev)
- mockery/mockery: ^0.9.4
- orchestra/testbench: ~3.2
- phpunit/phpunit: ~4.0
This package is not auto-updated.
Last update: 2024-09-14 19:04:08 UTC
README
laravel-submitter是一个简单的Laravel 5库,用于上传媒体(视频和图片),并将状态更新和网站链接添加到Facebook、Twitter和Youtube等热门社交网站的用户账户。
此库还有助于获取用户身份验证令牌,这些令牌可用于延迟提交。
支持的服务
该库支持Facebook、Twitter和Youtube。更多服务将很快实现。
包含的服务实现
- Youtube
- 更多即将到来!
安装
将laravel-submitter添加到composer.json文件中
"require": {
"navneetrai/laravel-submitter": "^1.0"
}
使用composer安装此包。
$ composer update
注册包
在config/app.php中的providers数组内注册服务提供者
'providers' => [ // ... Userdesk\Submission\SubmissionServiceProvider::class, ]
在config/app.php中的aliases数组内添加别名
'aliases' => [ // ... 'Submission' => Userdesk\Submission\Facades\Submission::class, ]
配置
配置laravel-submitter有两种方式。
选项1
使用Artisan命令创建包的配置文件
$ php artisan vendor:publish --provider="Userdesk\Submission\SubmissionServiceProvider"
选项2
在config目录下手动创建配置文件config/subscription.php
并将以下代码放入其中。
<?php return [ /* |-------------------------------------------------------------------------- | Submission Config |-------------------------------------------------------------------------- */ /** * Services */ 'services' => [ 'facebook' => [ 'client_id' => '', 'client_secret' => '', 'scope' => ['email', 'public_profile', 'publish_actions'], ], 'twitter' => [ 'client_id' => '', 'client_secret' => '', // No scope - oauth1 doesn't need scope ], 'youtube' => [ 'client_id' => '', 'client_secret' => '', 'scope' => [ 'profile', 'email', 'https://www.googleapis.com/auth/youtube', 'https://www.googleapis.com/auth/youtube.upload', 'https://www.googleapis.com/auth/youtube.readonly' ], ], ] ];
凭证
将您的凭证添加到config/submission.php
(取决于您选择的配置选项)
使用
基本用法
只需按照以下步骤操作,您就可以获取提交器实例
$submitter = Submission::submitter('twitter');
如果您调用的服务不存在或者缺少该服务的配置,您将得到一个SubmissionException
。
将用户重定向到网站进行身份验证
要开始身份验证过程,您可以调用提交器实例的authenticate方法
$submitter = Submission::submitter($website); return $submitter->authenticate($state);
您还应该向此方法传递一个整数作为$state
。该变量将作为您的请求的唯一标识符,您可以在以后用于存储用户身份验证令牌。
您将获得一个重定向响应,该响应将用户重定向到网站进行身份验证。
完成提交
用户身份验证是一个基于OAuth的兩步驟過程。此外,认证过程因网站而异。此包旨在封装这些差异并提供统一接口,适用于OAuth 1网站(如Twitter)和OAuth 2网站(如Facebook)。
为此,您需要在app\Http
目录下的routes.php
文件中添加一个命名路由,以便自动处理OAuth重定向。
Route::get('/any-base-url-of-your-liking/{website}/{state?}', ['as'=>'package.Userdesk.submission.authenticate', 'uses'=>'YourSubmissionController@authenticate']);
您可以为每个网站设置重定向URL为http://your-website-host.com/any-base-url-of-your-liking/website-name
因此,如果我们假设您的网站托管地址为http://www.example.com
并且您使用authenticate
作为基础URL,那么在您的Facebook开发人员配置文件中,您应该将重定向URL设置为http://www.example.com/authenticate/facebook
上述方法将在身份验证后自动将用户重定向到我们的命名路由。
要完成认证过程,YourSubmissionController
中的authenticate
函数应如下所示
public function authenticate(Request $request, String $website, int $state = 0){ $submitter = Submission::submitter($website); try{ $credentials = $submitter->completeAuthentication($request, $state); }catch(InvalidTokenException $e){ //Check configuration variables. }catch(InvalidPrivilegeException $e){ //Flash message to user that he needs to provide required privileges for submission to be successful. } //Fetch Information from Credentials Object $state = $credentials->getState(); $user = $credentials->getUser(); $username = $user->getId(); $info = $user->getProfile(); $token = $credentials->getToken(); $tokenArray = $token->getTokenArray(); //You can now save tokenArray to your database for later use }
如果您在调用authenticate方法之前未定义路由package.Userdesk.submission.authenticate
,您将得到一个MissingRouteException
如果由于配置原因认证过程失败,您将收到一个 InvalidTokenException
。如果用户未提供提交所需的权限,您将收到一个 InvalidPrivilegeException
。在这种情况下,您可以通知用户他必须提供所需的权限。
使用存储令牌上传项目
您可以使用上面存储的令牌提交媒体并在目标网站上推送更新。为此,您首先需要创建一个提交对象并将其存储的令牌添加到其中。
$submitter = Submitter::submitter($website); $token = new SubmissionToken(); $token->addTokenArray($tokenArray); $submitter->addToken($token);
如果您尝试上传项目而不添加存储的令牌,您将收到一个 MissingTokenException
。如果令牌已过期或被用户撤销,则您将收到一个 InvalidTokenException
。
此库还旨在统一不同网站API抛出的不同异常。如果目标网站API生成异常,您将收到一个 InvalidUploadException
。
上传视频
您可以使用上面存储的令牌使用此代码在目标网站上提交视频
try{ $submitter = Submitter::submitter($website); $token = new SubmissionToken(); $token->addTokenArray($tokenArray); $video = new SubmissionVideoItem($title, $description, $localThumb, $localVideo, $keywords); $submitter->addToken($token); $result = $submitter->uploadVideo($video); $status = $result->getStaus(); $url = $result->getUrl(); }catch(InvalidUploadException $e){ Log::error($e->getMessage()); }
关键字应该是逗号分隔的字符串。并非所有网站都使用关键字进行视频提交。
每个网站都有自己的视频上传政策。您的视频应遵守网站政策才能成功上传。
要上传视频,您需要将一个 SubmissionVideoItem
传递给 uploadVideo
方法。
使用存储令牌提交图片
您可以使用上面存储的令牌使用此代码在目标网站上提交图片
$submitter = Submitter::submitter($website); try{ $token = new SubmissionToken(); $token->addTokenArray($tokenArray); $image = new SubmissionImageItem($title, $description, $localImage, $keywords); $submitter->addToken($token); $result = $submitter->uploadImage($image); $status = $result->getStaus(); $url = $result->getUrl(); }catch(InvalidUploadException $e){ Log::error($e->getMessage()); }
关键字应该是逗号分隔的字符串。并非所有网站都使用关键字进行图片提交。
一些网站,如YouTube,不支持图片上传。
每个网站都有自己的图片上传政策。您的图片应遵守网站政策才能成功上传。
要上传图片,您需要将一个 SubmissionImageItem
传递给 uploadImage
方法。
使用存储令牌提交链接
您可以使用上面存储的令牌使用此代码在目标网站上提交链接
$submitter = Submitter::submitter($website); try{ $token = new SubmissionToken(); $token->addTokenArray($tokenArray); $link = new SubmissionLinkItem($title, $description, $link, $keywords); $submitter->addToken($token); $result = $submitter->addLink($link); $status = $result->getStaus(); $url = $result->getUrl(); }catch(InvalidUploadException $e){ Log::error($e->getMessage()); }
关键字应该是逗号分隔的字符串。目前只有Facebook支持链接提交。
每个网站都有自己的链接提交政策。您的链接应遵守网站政策才能成功上传。
要上传链接,您需要将一个 SubmissionLinkItem
传递给 addLink
方法。
使用存储令牌添加状态更新/推文
您可以使用上面存储的令牌使用此代码在目标网站上添加状态更新/推文
$submitter = Submitter::submitter($website); try{ $token = new SubmissionToken(); $token->addTokenArray($tokenArray); $update = new SubmissionStatusItem($title, $status, $keywords); $submitter->addToken($token); $result = $submitter->addStatus($update); $status = $result->getStaus(); $url = $result->getUrl(); }catch(InvalidUploadException $e){ Log::error($e->getMessage()); }
一些网站,如YouTube,不支持状态更新。
每个网站都有自己的状态更新政策。您的链接应遵守网站政策才能成功上传。
例如,Twitter需要状态更新在140个字符以内。
要添加状态更新,您需要将一个 SubmissionStatusItem
传递给 addStatus
方法。