Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
25
Help us understand the problem. What is going on with this article?
@suzutan

PHPでSignin with Slackを試す

More than 3 years have passed since last update.

5/11日、SlackにSign in with Slack が実装されました。
すごく簡単に実装できるため、爆発的に普及しそう。
公式ブログ
翻訳記事
APIドキュメント - ボタン設置

Sign in with Slackボタンを作るまで

アプリを作る

https://api.slack.com/apps/new より、認証に利用するアプリを作成します。 Twitterのアプリに該当します。
Slack_API__New_Application___Slack.png

Client IDを取得する

左側のApp Credentials に飛び、Client IDとClient Secretを控えておく

Slack_API__Applications___Slack.png

ボタンを設置する

認証レベルを設定する

scopeに与えるパラメータを変更することにより、柔軟な権限設定が可能
複数指定する場合、 , でつなげる

  • identity.basic
    • 必須
    • access_token, user_name, user_id, team_id が取得可能
  • identity.email
    • オプション
    • メールアドレスを取得できる
  • identity.team
    • オプション
    • team名、チームドメインが取得できる
  • identity.avatar
    • オプション
    • ユーザのアバターURLが取得可能
    • (identity.teamが入っている場合、チームのアバターも取得可能)

ボタンのhtml

hrefの中身は各自で書き換えてください

<a href="https://slack.com/oauth/authorize?scope=identity.basic,identity.email&client_id=[上記で取得したClientID]"><img src="https://api.slack.com/img/sign_in_with_slack.png" /></a>

これをHTMLに貼り付けるだけでボタンの設置は完了です。

認証後の動き

Redirect URLにGETでcodeが返ってくるので、codeを用いてユーザ情報を取得しにいきます。以下のURLで返って来ました。

https://example.com/callback.php?code=[access_code]&state=

情報を取得しにいく

情報取得のURLは以下のとおりです。
access_tokenはログインしても変わらないため、access_tokenを保存して認証させるのがよいでしょう。

https://slack.com/api/oauth.access?client_id=[Client ID]&client_secret=[Client Secret]&code=[上記URLで取得したcode]

成功時json

{"ok":true,"access_token":"xoxp-xxxxx-xxxxxxxxxx-","scope":"identity.basic","user":{"name":"Example Administrator","id":"USER_ID"},"team":{"id":"TEAM_ID"}}

callback.php

<?php

$url = "https://slack.com/api/oauth.access";
$param = [
        "client_id" => "client_id_here",
        "client_secret" => "client_secret_here"
];


if(!isset($_GET["code"])) {
        echo "invalid response. <br />", PHP_EOL;
}

$param["code"] = $_GET["code"];

$curl = curl_init($url . "?" . http_build_query($param));
curl_setopt_array($curl, [CURLOPT_HTTPGET => true, CURLOPT_RETURNTRANSFER => true]);
$json = curl_exec($curl);
curl_close($curl);

$result = json_decode($json);

echo "{$result->user->name}さんようこそ!<br />",PHP_EOL;
echo "アクセストークンは{$result->access_token}です!<br />", PHP_EOL;

最後に

Slackのアカウントで認証できるアプリケーションが増えるととても便利になりそうですね。
OAuth認証のプロセスがすごいシンプルなので、30分もあれば理解できるのではないでしょうか。
slackを利用したログインを利用したい人はぜひ。

25
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
suzutan
Kubernetes/FFXIV/α7 Ⅲ

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
25
Help us understand the problem. What is going on with this article?