2017-06-08 9 views
0

TL; DR remember_meトークンを生成する独自の方法を使用するにはどうすればよいですか?Laravelのデフォルトのremember_meトークンが長すぎます

フレームワークなしで書かれた古いサイトがあり、Laravel(5.4.23)で書き直すという仕事をしています。 DBはアンタッチ可能ではなく、リファクタリングすることはできず、いかなる方法でも変更することはできません。

私はLaravel認証プロセスを、古いDBを反映する別のUserモデルを使用してカスタマイズすることができました。しかし、 "Remember me"機能に関しては、トークンの長さに問題があります。

古いサイトではすでに「Remember me」機能が使用されていますが、DBフィールドはBINARY(25)として定義されています。 SessionGuardクラスによって生成されるトークンは60文字です。

私の最初の試みは、トークンをDBに書き込む前にそのトークンを短くし、DBから読み込んだ後に再びトークンを展開する方法を見つけようとしました。私はそのような方法を見つけることができませんでした(そして私はそのような方法があるかどうか確信していません)。

次に、私自身のガードを書き、cycleRememberToken(トークンが生成される場所)をオーバーライドしました。セッションガードクラスは実際にいくつかの場所でインスタンス化されているため(構成に基づいてクラスをインスタンス化するのではなく)、私はそれを動作させることができませんでした。

だから私は立ち往生しています。私は短縮トークンを必要とし、それを得る方法を知らない。

答えて

0

まあ、私はある時点で正しい軌道に乗っていました。

自分のガードを作成して登録して使用する必要がありました。私の問題は、私が初めて試みたときに、私はそれを正しい方法で登録しなかったことでした。とにかく、これは私がやったことです。

私は

'guards' => [ 
    'web' => [ 
     'driver' => 'mysession', 
     'provider' => 'users', 
    ], 

    'api' => [ 
     'driver' => 'token', 
     'provider' => 'users', 
    ], 
], 

、最終的には私の新しいガード

class MyGuard extends SessionGuard implements StatefulGuard, SupportsBasicAuth 
{ 
    /** 
    * @inheritdoc 
    */ 
    protected function cycleRememberToken(AuthenticatableContract $user) 
    { 
     $user->setRememberToken($token = Str::random(25)); 

     $this->provider->updateRememberToken($user, $token); 
    } 

} 
として config/auth.phpにガードを変更AuthServiceProvides

Auth::extend('mysession', function ($app, $name, array $config) { 
    $provider = Auth::createUserProvider($config['provider']); 

    $guard = new MyGuard('lrb', $provider, app()->make('session.store')); 

    $guard->setCookieJar($this->app['cookie']); 
    $guard->setDispatcher($this->app['events']); 
    $guard->setRequest($this->app->refresh('request', $guard, 'setRequest')); 

    return $guard; 
}); 

に次のように置きます

関連する問題