Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[refactor] Simplify module #12

Merged
merged 16 commits into from
Mar 7, 2015
Merged

[refactor] Simplify module #12

merged 16 commits into from
Mar 7, 2015

Conversation

kawanamiyuu
Copy link
Member

#11 の続きのPR

#11 (comment)

  • Moduleはサービス毎にinstallする
  • setterもサービス毎に実装する
    • 主要な3、4程度であとは必要に応じて足していく
  • PHPoAuthLibのラッパークラス(Facade)を用意し、最小限の知識(API)で使えるようにする

↓のような感じで、Moduleクラスを1つ、DI traitを必要に応じて複数、をイメージしています

Ray.OAuthModule/
 |-OAuthModule.php
 |-Inject/
   `TwitterOAuthInject.php
   `FacebookOAuthInject.php
   `GoogleOAuthInject.php

#11 (comment)

ユーザーがどのサービスが用意されてるか、コードでわかるように以下のようにSERVICE定数を用意してあげればどうでしょうか。

$this->install(new OAuthModule(SERVICE::TWITTER, $consumerKey...);
$this->install(new OAuthModule(SERVICE::FACKEBOOK, $consumerKey...);

@kawanamiyuu
Copy link
Member Author

OAuth1とOAtuh2でModuleクラスを分ける方向で実装してみました。
(OAuth2関連の実装はまだ行っていません。この方向性で問題なければ引き続き作業します。)

@koriym どうでしょうか?結構すっきりしたと思います。

使い方としては↓のようになります。

Install Module

use OAuth\OAuth2\Service\Facebook;
use Ray\Di\AbstractModule;
use Ray\OAuthModule\OAuth1Module;
use Ray\OAuthModule\OAuth1Service;
use Ray\OAuthModule\OAuth2Module;
use Ray\OAuthModule\OAuth2Service;

class AppModule extends AbstractModule
{
    protected function configure()
    {
        // install oauth1 module (for twitter)
        $this->install(new OAuth1Module(OAuth1Service::TWITTER, '{CONSUMER_KEY}', '{CONSUMER_SECRET}', '/callback/twitter', ['force_login' => 'true']);

        // install oauth2 module (for facebook)
        $this->install(new OAuth2Module(OAuth2Service::FACEBOOK, '{CONSUMER_KEY}', '{CONSUMER_SECRET}', '/callback/facebook', [Facebook::SCOPE_READ_STREAM], ['auth_type' => 'reauthenticate']);
    }
}

各ソーシャルサービスの認証画面にリダイレクトする処理

use Ray\OAuthModule\Inject\TwitterOAuthClientInject;
use Ray\OAuthModule\Inject\FacebookOAuthClientInject;

class RedirectController
{
    use TwitterOAuthClientInject;
    use FacebookOAuthClientInject;

    public function twitterAction()
    {
        // redirect to twitter authorization page
        $this->twitterOAuthClient->authorize();
        exit;
    }

    public function facebookAction()
    {
        // redirect to facebook authorization page
        $this->facebookOAuthClient->authorize();
        exit;
    }
}

認証完了後、ソーシャルサービスからコールバックされる処理

use Ray\OAuthModule\Inject\TwitterOAuthClientInject;
use Ray\OAuthModule\Inject\FacebookOAuthClientInject;

class CallbackController
{
    use TwitterOAuthClientInject;
    use FacebookOAuthClientInject;

    public function twitterAction()
    {
        $oauthToken = $_GET['oauth_token'];
        $oauthVerifier = $_GET['oauth_verifier'];

        // get Access Token
        $token = $this->twitterOAuthClient->requestAccessToken($oauthToken, $oauthVerifier);
            :
            :
    }

    public function facebookAction()
    {
        $code = $_GET['code'];

        // get Access Token
        $token = $this->facebookOAuthClient->requestAccessToken($code);
            :
            :
    }
}

@koriym
Copy link
Member

koriym commented Feb 26, 2015

良くなりましたね!

@koriym
Copy link
Member

koriym commented Feb 26, 2015

細かいですけどtwitterOAuthClienttwitterOAuthでもいいかも?
どうでしょうか。例えばBEARもresourceClientではなくresourceにしてます。

@kawanamiyuu
Copy link
Member Author

そうですね。そのほうがシンプルでいいと思います。

@kawanamiyuu
Copy link
Member Author

引き続きOAuth2の実装も進めていきます

@koriym
Copy link
Member

koriym commented Feb 27, 2015

👍

@kawanamiyuu kawanamiyuu changed the title [WIP][refactor] simplify module [refactor] Simplify module Mar 4, 2015
@kawanamiyuu
Copy link
Member Author

@koriym 全ての作業が完了しました。問題なければv2.0としてリリースしたいと思います。どうでしょうか

@koriym
Copy link
Member

koriym commented Mar 4, 2015

お疲れ様です!

@kawanamiyuu kawanamiyuu mentioned this pull request Mar 4, 2015
@kawanamiyuu
Copy link
Member Author

@koriym OAuthのdemo追加しました↑

@koriym
Copy link
Member

koriym commented Mar 6, 2015

いい感じですね

@kawanamiyuu kawanamiyuu merged commit b421ab0 into develop Mar 7, 2015
@kawanamiyuu kawanamiyuu deleted the refactor/simplify-module branch March 7, 2015 09:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants