PHP 7.3 画像を円でくり抜き、背景を透過する(GD使用)

PHPで画像の真ん中を円形でくり抜き。
円形以外の領域は透過している画像をGDを使用して作成してみます。


使用する画像



こちらで作成した500px x 500pxの画像を使用します。
PHP 7.3 画像の一部を切り取り、別の画像ファイルに保存する(GD使用)

a07_01.png



作戦



まず、元の画像と同じサイズの画像を用意。
真ん中を円で塗りつぶします。
この時、塗りつぶす色は透過色を指定しておきます。

元画像と、円形の透過した画像を重ね合わせます。


  1. <?php
  2. // 画像ファイルを読み込み
  3. $src_image = imagecreatefrompng('src.png');
  4. // 画像ファイルは縦横500px
  5. $rect = 500;
  6. // 真ん中が透過色のマスク画像を用意
  7. $mask = imagecreatetruecolor($rect, $rect);
  8. // 背景色に緑(0, 255, 0)を指定して塗りつぶし(色は任意)
  9. $green = imagecolorallocate($mask, 0, 255, 0);
  10. imagefill($mask, 0, 0, $green);
  11. // ここで一旦デバッグ出力
  12. imagepng($mask, 'mask1.png');
  13. // マスクの透過色を指定(255, 0, 255)
  14. $mask_transparent = imagecolorallocate($mask, 255, 0, 255);
  15. imagecolortransparent($mask, $mask_transparent);
  16. // 中央の円を透過色で塗りつぶし
  17. imagefilledellipse($mask, $rect/2, $rect/2, $rect, $rect, $mask_transparent);
  18. // 確認用にマスク画像を出力
  19. imagepng($mask, 'mask2.png');
  20. // 元画像とマスク画像を重ね合わせ
  21. imagecopymerge($src_image, $mask, 0, 0, 0, 0, $rect, $rect, 100);
  22. // ここまでの結果を確認
  23. imagepng($src_image, 'debug.png');




デバッグ用に出力した中間画像はこのようになります。

・mask1.png
a08_01.png

・mask2.png
a08_02.png

・debug.png
a08_03.png

元画像の真ん中だけくり抜くことができました。
最後に、緑色で塗りつぶしている箇所を透過色に変更します。

最終的なソースはこのようになりました。


  1. <?php
  2. // 画像ファイルを読み込み
  3. $src_image = imagecreatefrompng('src.png');
  4. // 画像ファイルは縦横500px
  5. $rect = 500;
  6. // 真ん中が透過色のマスク画像を用意
  7. $mask = imagecreatetruecolor($rect, $rect);
  8. // 背景色に緑(0, 255, 0)を指定して塗りつぶし(色は任意)
  9. $green = imagecolorallocate($mask, 0, 255, 0);
  10. imagefill($mask, 0, 0, $green);
  11. // マスクの透過色を指定(255, 0, 255)
  12. $mask_transparent = imagecolorallocate($mask, 255, 0, 255);
  13. imagecolortransparent($mask, $mask_transparent);
  14. // 中央の円を透過色で塗りつぶし
  15. imagefilledellipse($mask, $rect/2, $rect/2, $rect, $rect, $mask_transparent);
  16. // 元画像とマスク画像を重ね合わせ
  17. imagecopymerge($src_image, $mask, 0, 0, 0, 0, $rect, $rect, 100);
  18. // 余分な背景色の緑(0, 255, 0)を透過色に指定
  19. $src_transparent = imagecolorallocate($src_image, 0, 255, 0);
  20. imagecolortransparent($src_image, $src_transparent);
  21. // 結果を出力
  22. imagepng($src_image, 'result.png');




狙い通りの画像が得られました。

・result.png
a08_04.png

ちゃんと透過されているかわかりにくいのですね。
画像ビューワーで表示した結果はこのようになりました。

a08_05.png

PHP 7.3 画像の一部を切り取り、別の画像ファイルに保存する(GD使用)

PHPでGDライブラリを使用し、画像の一部を切り取り。
別のファイルに保存してみます。


GD



大抵のレンタルサーバーにインストール済だと思います。

imagecreatefromjpegという関数を呼び出して、


PHP Fatal error: Uncaught Error: Call to undefined function imagecreatefromjpeg



というようなエラーが表示された場合はGDがインストールされていません。
以下のコマンドでインストールします。


$ sudo apt install php-gd





画像の切り抜き



切り抜いた箇所を貼り付ける画像リソースをimagecreatetruecolorで作成。


  1. imagecreatetruecolor(int $width , int $height)



imagecopyresampledで切り抜き範囲を指定し貼り付け。


  1. imagecopyresampled (
  2.     resource $dst_image ,
  3.     resource $src_image ,
  4.     int $dst_x ,
  5.     int $dst_y ,
  6.     int $src_x ,
  7.     int $src_y ,
  8.     int $dst_w ,
  9.     int $dst_h ,
  10.     int $src_w ,
  11.     int $src_h
  12. )



imagepngで保存します。


  1. imagepng ( resource $image [, mixed $to [, int $quality [, int $filters ]]] )



サンプル画像はこちらからお借りしました。
http://anihonetwallpaper.com/%e3%83%a9%e3%83%96%e3%83%a9%e3%82%a4%e3%83%96%e5%a3%81%e7%b4%99/16721



サンプルプログラム



矢澤にこの画像を正方形で切り抜いてみます。


  1. <?php
  2. // 画像ファイルを読み込み
  3. $src_image = imagecreatefromjpeg('sample.jpg');
  4. // 切り抜いた画像の貼付け先リソース(正方形)を確保
  5. $new_rect = 500;
  6. $dst_image = imagecreatetruecolor($new_rect, $new_rect);
  7. $src_x = 100;
  8. $src_y = 200;
  9. // 画像の切り抜き実行
  10. imagecopyresampled($dst_image, $src_image, 0, 0, $src_x, $src_y, $new_rect, $new_rect, $new_rect, $new_rect);
  11. // 結果を保存
  12. imagepng($dst_image, 'dst.png');



うまく切り抜けました。

a07_01.png

PHP 7.3をUbuntu Server 18.04へaptでインストール

Ubuntu Server 18.04
aptでインストールできるPHPのバージョンは7.2です。

PHP 7.3のインストールを試してみます。
こちらを参考にしました。
How to install PHP 7.3 on Ubuntu 18.04


現在インストールされているパッケージの最新化



apt update, upgradeで現在インストールされているパッケージを最新に更新しておきます。

$ sudo apt update
$ sudo apt upgrade




PPA(パーソナル・パッケージ・アーカイブ)の追加



PHP 7.3のPPAを追加

$ sudo apt install software-properties-common

$ sudo add-apt-repository ppa:ondrej/php
...
詳しい情報: https://launchpad.net/~ondrej/+archive/ubuntu/php
[ENTER] を押すと続行します。Ctrl-c で追加をキャンセルできます。
(Enterキーを押下)

$ sudo apt update





PHP 7.3のインストール



これまでの操作で、PHP 7.3がインストール候補に追加されます。

$ sudo apt search php7.3



お試しでPHP 7.3のコマンドラインインターフェースをインストール。

$ sudo apt install php7.3-cli



PHPのバージョンを確認

$ php --version
PHP 7.3.10-1+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Oct 8 2019 05:33:38) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.10, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.10-1+ubuntu18.04.1+deb.sury.org+1, Copyright (c) 1999-2018, by Zend Technologies



PHP 7.3がインストールできました。


Laravel 5.8 Slackに通知を送信する(laravel/slack-notification-channel)

Laravel 5.8
laravel/slack-notification-channelを利用してSlackへの通知を試してみました。

本家のドキュメントはこちら
https://laravel.com/docs/5.8/notifications#slack-notifications


Slack Webhook URL



プログラムの前に通知先のURLを取得しておきます。
こちらにアクセスしWebhook URLを作成します。
https://slack.com/apps/A0F7XDUAZ

a04_01.png

a04_02.png

a04_03.png


https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX
という形式のURLが取得できると思います。

.envファイルに追記しておきます。

・.env


SLACK_URL=https://hooks.slack.com/services/XXXXXXXXX/XXXXXXXXX/XXXXXXXXXXXXXXXXXXXXXXXX




laravel/slack-notification-channel



つづいて、slack通知用のライブラリ「laravel/slack-notification-channel」をインストールします。


$ composer require laravel/slack-notification-channel






Notifiable



Slackへの通知はNotifiableトレイトを使用しているクラスに対して実行可能となります。
サンプルして、デフォルトで存在するApp\Userを変更しSlackへの通知を可能にしています。

・app/User.php


  1. <?php
  2. namespace App;
  3. use Illuminate\Notifications\Notifiable;
  4. use Illuminate\Contracts\Auth\MustVerifyEmail;
  5. use Illuminate\Foundation\Auth\User as Authenticatable;
  6. class User extends Authenticatable
  7. {
  8.     use Notifiable;
  9.     /**
  10.      * The attributes that are mass assignable.
  11.      *
  12.      * @var array
  13.      */
  14.     protected $fillable = [
  15.         'name', 'email', 'password',
  16.     ];
  17.     /**
  18.      * The attributes that should be hidden for arrays.
  19.      *
  20.      * @var array
  21.      */
  22.     protected $hidden = [
  23.         'password', 'remember_token',
  24.     ];
  25.     /**
  26.      * The attributes that should be cast to native types.
  27.      *
  28.      * @var array
  29.      */
  30.     protected $casts = [
  31.         'email_verified_at' => 'datetime',
  32.     ];
  33.     // 以下を追加
  34.     public function routeNotificationForSlack($notification)
  35.     {
  36.         return env('SLACK_URL');
  37.     }
  38. }






Notification



通知する内容はNotificationクラスで指定します。
以下のコマンドでクラスの雛形を作成。


$ php artisan make:notification SampleNotification




app/Notifications/SampleNotification.phpが出力されます。
内容を以下のように編集。

・app/Notifications/SampleNotification.php


  1. <?php
  2. namespace App\Notifications;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Notifications\Notification;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. use Illuminate\Notifications\Messages\MailMessage;
  7. use Illuminate\Notifications\Messages\SlackMessage;
  8. class SampleNotification extends Notification
  9. {
  10.     use Queueable;
  11.     public function __construct()
  12.     {
  13.     }
  14.     public function via($notifiable)
  15.     {
  16.         return ['slack'];
  17.     }
  18.     public function toArray($notifiable)
  19.     {
  20.         return [
  21.         ];
  22.     }
  23.     public function toSlack($notifiable) {
  24.         return (new SlackMessage)
  25.             ->from('Bomb', ':bomb:') // 送信元
  26.             ->to('#general ') // 送信先
  27.             ->content('Slackへの通知テスト'); // メッセージ
  28.     }
  29. }




送信テスト用のコマンドを作成します。
・app/Console/Commands/SampleCommand.php


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\DB;
  5. use App\User;
  6. use App\Notifications\SampleNotification;
  7. class SampleCommand extends Command
  8. {
  9.     protected $signature = 'my:command';
  10.     protected $description = 'コマンドサンプル';
  11.     public function __construct()
  12.     {
  13.         parent::__construct();
  14.     }
  15.     public function handle()
  16.     {
  17.         // Notifiableなオブジェクトを作成
  18.         $user = new User();
  19.         // 対象にSlackメッセージ配信
  20.         $user->notify(new SampleNotification());
  21.         
  22.     }
  23. }




実行


$ php artisan my:command



お手軽にSlackへ通知できました。

a04_04.png


複数人への一括配信



複数人に一括で配信したい場合は、Notification::sendが便利です。


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\DB;
  5. use App\User;
  6. use App\Notifications\SampleNotification;
  7. use Illuminate\Notifications\Notification;
  8. class SampleCommand extends Command
  9. {
  10.     protected $signature = 'my:command';
  11.     protected $description = 'コマンドサンプル';
  12.     public function __construct()
  13.     {
  14.         parent::__construct();
  15.     }
  16.     public function handle()
  17.     {
  18.         // Notifiableなオブジェクトを作成
  19.         //$user = new User();
  20.         // 対象にSlackメッセージ配信
  21.         //$user->notify(new SampleNotification());
  22.         $users = [];
  23.         $users[] = new User();
  24.         \Notification::send($users, new SampleNotification());
  25.         
  26.     }
  27. }





ユーザーごとにメッセージ内容を変更



SampleNotificationのtoSlackは、Notifiableトレイトをuseしているオブジェクトが渡されます。
今回の例だとUserオブジェクトが$notifiableとして渡されます。

ユーザーごとにメッセージを変更したい場合は、$notifiableの内容により処理を変更すればOKです。

・SampleNotification.php


  1. <?php
  2. namespace App\Notifications;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Notifications\Notification;
  5. use Illuminate\Contracts\Queue\ShouldQueue;
  6. use Illuminate\Notifications\Messages\MailMessage;
  7. use Illuminate\Notifications\Messages\SlackMessage;
  8. class SampleNotification extends Notification
  9. {
  10.     use Queueable;
  11.     public function __construct()
  12.     {
  13.     }
  14.     public function via($notifiable)
  15.     {
  16.         return ['slack'];
  17.     }
  18.     public function toArray($notifiable)
  19.     {
  20.         return [
  21.         ];
  22.     }
  23.     public function toSlack($notifiable) {
  24.         return (new SlackMessage)
  25.             ->from('Bomb', ':bomb:') // 送信元
  26.             ->to('#general ') // 送信先
  27.             ->content('Slackへの通知テスト:'.$notifiable->name); // メッセージ
  28.     }
  29. }




・SampleCommand.php


  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\DB;
  5. use App\User;
  6. use App\Notifications\SampleNotification;
  7. use Illuminate\Notifications\Notification;
  8. class SampleCommand extends Command
  9. {
  10.     protected $signature = 'my:command';
  11.     protected $description = 'コマンドサンプル';
  12.     public function __construct()
  13.     {
  14.         parent::__construct();
  15.     }
  16.     public function handle()
  17.     {
  18.         $users = [];
  19.         $userA = new User();
  20.         $userA->name = 'Aさんへのコメント';
  21.         $users[] = $userA;
  22.         $userB = new User();
  23.         $userB->name = 'Bさんへのコメント';
  24.         $users[] = $userB;
  25.         $userC = new User();
  26.         $userC->name = 'Cさんへのコメント';
  27.         $users[] = $userC;
  28.         \Notification::send($users, new SampleNotification());
  29.         
  30.     }
  31. }




実行結果

a04_05.png

その他の使い方は、本家のドキュメントが詳しいです。
https://laravel.com/docs/5.8/notifications#slack-notifications



【参考URL】
https://laravel.com/docs/5.8/notifications#slack-notifications
Slack 通知を送信する
LaravelでFacadeを作ってSlackに通知してみた

Laravel 5.8 Slack OAuthによるログインを実装する

SlackではOAuth 2.0認証が公開されています。
Sign in with Slack

この機能を利用して、LaravelでSlackアカウントによるSSO認証を組み込んでみます。


認証前の雛形



ログイン前の画面とログイン後に表示する画面を作成します。
ルートを追加。

・routes/web.php


  1. <?php
  2. Route::get('/login', function () {
  3.     return view('login');
  4. });
  5. Route::get('/home', function () {
  6.     return view('home');
  7. });




ログイン前の画面
・resources/views/login.blade.php


  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>ログイン</title>
  7.     </head>
  8.     <body>
  9.         <div>
  10.             <a href="{{ url('home') }}">Slackでログイン</a>
  11.         </div>
  12.     </body>
  13. </html>




ログイン後の画面
・resources/views/home.blade.php


  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>コンテンツ</title>
  7.     </head>
  8.     <body>
  9.         <div>
  10.             ログインしました
  11.         </div>
  12.     </body>
  13. </html>




ログイン画面のリンクをクリックしたらSlackのOAuth認証を実行。
ログイン後の画面に遷移する想定です。

a03_01.png

a03_02.png



Slack App



プログラムの作成前に、Slack Appを作成してOAuthのための認証情報を作成しておきます。
こちらが参考になりました。
PHPでSignin with Slackを試す

以下のリンクより認証に使用するアプリを作成します。
https://api.slack.com/apps/new

a03_03.png

作成すると、App IDやClient IDが発行されます。

a03_04.png

必要になるのは
・Client ID
・Client Secret
の2つですので控えておきます。

続いて、メニューの「OAuth & Permissions」を表示します。
「Redirect URLs」の箇所にOAuth認証後のリダイレクトを許可するURLを追加しておきます。
今回はhttp://[テストサーバー]/callbackを許可しました。

a03_05.png

これでSlack側の設定は完了です。



Laravel Socialite



Laravelにはlaravel/socialite」というOAuth認証を使用したログインを実現するためのパッケージが用意されています。
Laravel 5.3で外部アカウントを使用した認証機能を実装する方法

しかしSlackには対応していないそうで、別途自前で実装する必要があります。
Laravel 5.3のSocialiteに含まれていないLINEやYahoo!JAPANなどの認証サービスを利用する方法

Slackの実装サンプルを公開されている記事を見つけました。
Implementing Sign in with Slack using Laravel Socialite
こちらを参考に実装してみます。

まず、composerでlaravel/socialiteをインストールします。
Laravelのプロジェクトディレクトリに移動して以下のコマンドを実行。


$ composer require laravel/socialite




続いて、.envファイルを編集。
Slack Appを作成した際に取得したClient ID、Client Secret。
認証後にリダイレクトするURLを追記します。

・.evn


SLACK_CLIENT_ID=729920959312.7XXXXXXXXX
SLACK_CLIENT_SECRET=9b605bf03920887XXXXXXXXXXXX
SLACK_REDIRECT_CALLBACK_URL=http://192.168.1.103:8000/callback




services.phpで追記した.envのslackの情報が反映されるよう編集します。
・config/services.php


  1. <?php
  2. return [
  3.     /*
  4.     |--------------------------------------------------------------------------
  5.     | Third Party Services
  6.     |--------------------------------------------------------------------------
  7.     |
  8.     | This file is for storing the credentials for third party services such
  9.     | as Stripe, Mailgun, SparkPost and others. This file provides a sane
  10.     | default location for this type of information, allowing packages
  11.     | to have a conventional place to find your various credentials.
  12.     |
  13.     */
  14.     // (略)
  15.     // Slackの設定を追加
  16.     'slack' => [
  17.         'client_id' => env('SLACK_CLIENT_ID'),
  18.         'client_secret' => env('SLACK_CLIENT_SECRET'),
  19.         'redirect' => env('SLACK_REDIRECT_CALLBACK_URL'),
  20.     ],
  21. ];





Creating a custom Slack provider for Laravel Socialite



下準備の設定は終わったので、いよいよSlack認証を行うSocialiteを作成していきます。

app/Socialiteディレクトリを作成。
Socialite.phpを作成します。

・app/Socialite/Socialite.php


  1. <?php namespace App\Socialite;
  2. use Laravel\Socialite\SocialiteManager;
  3. class Socialite extends SocialiteManager
  4. {
  5.     public function createSlackDriver()
  6.     {
  7.         $config = $this->app['config']['services.slack'];
  8.         return $this->buildProvider(SlackProvider::class, $config);
  9.     }
  10. }




app/ProvidersディレクトリにSocialiteServiceProvider.phpを作成します。

・app/Providers/SocialiteServiceProvider.php


  1. <?php namespace App\Providers;
  2. use App\Socialite\Socialite;
  3. use Laravel\Socialite\SocialiteServiceProvider as SocialiteParentServiceProvider;
  4. class SocialiteServiceProvider extends SocialiteParentServiceProvider
  5. {
  6.     public function register()
  7.     {
  8.         $this->app->singleton('Laravel\Socialite\Contracts\Factory', function ($app) {
  9.             return new Socialite($app);
  10.         });
  11.     }
  12. }




最後にapp/SocialiteディレクトリへSlackProvider.phpを作成します。

・app/Socialite/SlackProvider.php


  1. <?php namespace App\Socialite;
  2. use Laravel\Socialite\Two\User;
  3. use Laravel\Socialite\Two\AbstractProvider;
  4. use Laravel\Socialite\Two\ProviderInterface;
  5. class SlackProvider extends AbstractProvider implements ProviderInterface
  6. {
  7.     /**
  8.      * {@inheritdoc}
  9.      */
  10.     protected $scopes = [
  11.         'identity.basic',
  12.         'identity.team',
  13.         'identity.email',
  14.         'identity.avatar'
  15.     ];
  16.     /**
  17.      * {@inheritdoc}
  18.      */
  19.     protected function getAuthUrl($state)
  20.     {
  21.         return $this->buildAuthUrlFromBase('https://slack.com/oauth/authorize', $state);
  22.     }
  23.     /**
  24.      * {@inheritdoc}
  25.      */
  26.     protected function getTokenUrl()
  27.     {
  28.         return 'https://slack.com/api/oauth.access';
  29.     }
  30.     /**
  31.      * {@inheritdoc}
  32.      */
  33.     protected function getUserByToken($token)
  34.     {
  35.         $options = ['headers' => ['Accept' => 'application/json']];
  36.         $endpoint = 'https://slack.com/api/users.identity?token='.$token;
  37.         $response = $this->getHttpClient()->get($endpoint, $options)->getBody()->getContents();
  38.         return json_decode($response, true);
  39.     }
  40.     /**
  41.      * {@inheritdoc}
  42.      */
  43.     protected function mapUserToObject(array $user)
  44.     {
  45.         return (new User)->setRaw($user)->map([
  46.             'id'        => \Arr::get($user, 'user.id'),
  47.             'name'     => \Arr::get($user, 'user.name'),
  48.             'email'     => \Arr::get($user, 'user.email'),
  49.             'avatar'    => \Arr::get($user, 'user.image_32'),
  50.         ]);
  51.     }
  52. }





config/app.phpを編集。
作成したSocialiteServiceProviderが利用できるよう、providersに追記します。

・config/app.php


  1. <?php
  2. return [
  3.     /*
  4.     |--------------------------------------------------------------------------
  5.     | Autoloaded Service Providers
  6.     |--------------------------------------------------------------------------
  7.     |
  8.     | The service providers listed here will be automatically loaded on the
  9.     | request to your application. Feel free to add your own services to
  10.     | this array to grant expanded functionality to your applications.
  11.     |
  12.     */
  13.     'providers' => [
  14.         // ...
  15.         //slack/socialite
  16.         App\Providers\SocialiteServiceProvider::class,
  17.     ],
  18. ];



これでSlack OAuth認証を利用する準備ができました。




アプリケーションへの組み込み



最初に作成した雛形にSlack認証を組み込んでみます。

・routes/web.php


  1. <?php
  2. Route::get('/login', function () {
  3.     return view('login');
  4. });
  5. Route::get('/home', function () {
  6.     return view('home');
  7. });
  8. Route::get('/redirect', 'OAuthController@redirectToProvider');
  9. Route::get('/callback', 'OAuthController@handleProviderCallback');




ログイン前の画面
・resources/views/login.blade.php


  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>ログイン</title>
  7.     </head>
  8.     <body>
  9.         <div>
  10.             <a href="{{ url('redirect') }}">Slackでログイン</a>
  11.         </div>
  12.     </body>
  13. </html>




ログイン後の画面
・resources/views/home.blade.php


  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <meta charset="utf-8">
  5.         <meta name="viewport" content="width=device-width, initial-scale=1">
  6.         <title>コンテンツ</title>
  7.     </head>
  8.     <body>
  9.         <div>
  10.             ログインしました
  11.         </div>
  12.     </body>
  13. </html>




OAuth認証のためのコントローラー
・app/Http/Controllers/OAuthController.php


  1. <?php
  2. namespace App\Http\Controllers;
  3. use Socialite;
  4. class OAuthController extends Controller
  5. {
  6.     
  7.     // Slack認証へ遷移
  8.     public function redirectToProvider()
  9.     {
  10.         return Socialite::driver('slack')->redirect();
  11.     }
  12.     // Slackからのリダイレクト
  13.     public function handleProviderCallback()
  14.     {
  15.         $user = Socialite::driver('slack')->stateless()->user();
  16.         return view('home', ['user' => $user]);
  17.     }
  18. }




動かしてみます。

a03_06.png

a03_07.png

a03_08.png

無事SlackのOAuthを通過し、アプリケーションに戻ってきました。
Slackから取得できる情報は以下の通り。


'id' => [Slack ID]
'nickname' => [ニックネーム]
'name' => [ユーザー名]
'email' => [ユーザーのメールアドレス]
'avatar' => [アバターの画像URL]






【参考URL】
Sign in with Slack
PHPでSignin with Slackを試す
Laravel 5.3で外部アカウントを使用した認証機能を実装する方法
Laravel 5.3のSocialiteに含まれていないLINEやYahoo!JAPANなどの認証サービスを利用する方法

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ