鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

Mojoliciousでクッキーの値が設定されているか、クライアントサイドで確認したい

以下のように、Mojolicious::Plugin::Web::Authプラグインをつかっています。 やりたいことは、ブラウザを閉じたらセッションを無効化したい。

package Atndfc::Web;
use Mojo::Base 'Mojolicious';

# This method will run once at server start
sub startup {
    my $self = shift;

    # Documentation browser under "/perldoc"
    $self->plugin('PODRenderer');

    my $config = $self->plugin( 'Config', { file => 'atndfc.conf' } );

    #Twitter
    $self->plugin(
        'Web::Auth',
        module      => 'Twitter',
        key         => $config->{twitter_consumer_key},
        secret      => $config->{twitter_consumer_secret},
        on_finished => sub {
            my ( $c, $access_token, $access_secret, $account_info ) = @_;
            $c->session( expiration      => 0 );
            $c->session( 'access_token'  => $access_token );
            $c->session( 'access_token_secret' => $access_secret );
            $c->session( 'screen_name'   => $account_info->{screen_name} );
            $c->session( 'user_id'       => $account_info->{id} );
            $c->session( 'site'          => "twitter" );
        },
    );

    # Router
    my $r = $self->routes;

    # Normal route to controller
    $r->get('/login')->to(
        cb => sub {
            my $self = shift;
            $self->session(expires => 1); 
            $self->redirect_to("/auth/twitter/authenticate");
        }
    );

    $r->get('/follows')->to("root#follows");
    $r->get('/')->to("root#index");

    $r->get('/auth/twitter/callback')->to(
        cb => sub {
            my $self = shift;
            $self->redirect_to("/");
        }
    );

}

1;

クライアント側でmojolicousクッキーが設定されているか確認したい。

jquery.cookie.jsを使って

            var token = $.cookie('mojolicious'); 
            alert("has cookies" + token);

Twitterログイン(/login)のあと、/にリダイレクトされて、その延長で上記javascriptコード が走るんですが、alertで表示されるtokenの値がundefinedとなって、うまくいかない。 ログイン後なので、クッキーに値が設定されてるはずなんですが。

なんとか、クライアントサイドでクッキー値(Mojolicious)があるか、判断したいんですが。 クッキーの値があった場合のみ、ajaxでサーバーサイドPerlと1回会話したい。 ない場合は、会話をしないようにしたい。無駄な通信をさせないために。

javascriptに変数を渡すなら、これでいいか。

リダイレクト先の/のrenderの中でセッションの値を渡せば目的は 達成されるかな。

render(json=>session("user_id"),partial=>1);