1

oauth2-server-phpを使用して認証コードを正常に実装したLaravel 4.2アプリがあります。ただし、ユーザー資格情報の付与が機能していないようです。

これは、oauth サーバーをセットアップする私のコードです。

App::singleton(
    'oauth2',
    function () {

        $host = Config::get('database.connections.mongodb.host');
        $hosts = is_array($host) ? $host : [$host];
        $dbName = Config::get('database.connections.mongodb.database');
        $dbOptions =
            empty( Config::get('database.connections.mongodb.options') ) ? [] : Config::get(
                'database.connections.mongodb.options'
            );

        $mongo = new MongoClient('mongodb://' . implode(',', $hosts) . '/' . $dbName, $dbOptions);
        $storage = new OAuth2\Storage\Mongo($mongo->{$dbName});
        $server = new OAuth2\Server(
            $storage, [
            'always_issue_new_refresh_token' => true,
            'refresh_token_lifetime'         => 2419200,
        ]
        );

        $userStorage = new \Medusa\Oauth\Storage\MedusaUserCredentials();

        $server->addStorage($userStorage, 'users');

        $userCredentialGrant = new Oauth2\GrantType\UserCredentials($userStorage);

        $server->addGrantType(new OAuth2\GrantType\AuthorizationCode($storage));
        $server->addGrantType(new OAuth2\GrantType\ClientCredentials($storage));
        $server->addGrantType($userCredentialGrant);
        $server->addGrantType(new OAuth2\GrantType\RefreshToken($storage));

        return $server;
    }
);

MedusaUserCredentials には次のコードがあります。

namespace Medusa\Oauth\Storage;

use OAuth2\Storage\UserCredentialsInterface;

class MedusaUserCredentials implements UserCredentialsInterface
{

    public function checkUserCredentials($username, $password)
    {
        return Auth::attempt(['email_address' => strtolower($username), 'password' => $password, 'active' => 1]);
    }

    public function getUserDetails($username)
    {
        return ['user_id' => $username];
    }
}

の生のペイロードを使用してトークンルートにWebサーバーに投稿すると

grant_type=password&username=<USERNAME>&password=<PASSWORD>

ログインページを取得するだけです。トークンルートはこんな感じ

Route::post(
    'oauth/token',
    function () {
        $bridgedRequest = OAuth2\HttpFoundationBridge\Request::createFromRequest(Request::instance());
        $bridgedResponse = new OAuth2\HttpFoundationBridge\Response();

        $bridgedResponse = App::make('oauth2')->handleTokenRequest($bridgedRequest, $bridgedResponse);
print_r($bridgedResponse); die();
        return $bridgedResponse;
    }
);

私は何が欠けていますか?

ありがとう!

4

1 に答える 1

0

問題が見つかりました -- 解決しなければならない名前空間の問題がありました。何らかの理由で、私のアプリは 200 OK 応答と通常のログイン ページを返したので、ログを確認することは考えていませんでした。

私は知っています、悪い開発者、クッキーはありません!

于 2016-08-23T22:27:07.150 に答える