2

Flask アプリのユーザーはhttps://example.com/loginでログインしますが、 http://customdomain.comのようなカスタム ドメインを設定できます

ユーザーがカスタム ドメインにアクセスしているときに Flask セッション変数にアクセスできるようにして、ユーザーがログインしている場合にユーザー インターフェイス コントロールを削除および変更できるようにしたいと考えています。

もちろん、ブラウザーは、Cookie が作成された場所以外のドメインからの Cookie へのアクセスを防ぎます。

これを回避する方法についての考えやアプローチはありますか?

4

1 に答える 1

0

これが私がしたことです。うまくいくようです。withCredentialsset toを使用して、サーバーへの AJAX JSONP 呼び出しを行いますtrue。サーバーはセッション Cookie を取得し、ユーザーがログインしているかどうかをクライアントに通知します。応答に基づいて、追加のユーザー インターフェイス要素をユーザーに表示できます。

<script>

  $(".logged_in").hide();

  request = $.ajax({
    url: "http://example.com/ping/",
    type: "GET",
    dataType: "jsonp",
    xhrFields: {
      withCredentials: true
   }

});

request.done(function (response, textStatus, jqXHR){
    // log a message to the console

    if (response['logged_in'])
    {
      $(".logged_in").show();
    }
});

request.fail(function (jqXHR, textStatus, errorThrown){
  // log the error to the console
  console.error("The following error occurred: " + textStatus, errorThrown);
  console.log("jqXHR: " + JSON.stringify(jqXHR))
});

</script>

サーバーコード:

def jsonp(func):
    """Wraps JSONified output for JSONP requests."""
    @wraps(func)
    def decorated_function(*args, **kwargs):
        callback = request.args.get('callback', False)
        if callback:
            data = str(func(*args, **kwargs).data)
            content = str(callback) + '(' + data + ')'
            mimetype = 'application/javascript'
            return current_app.response_class(content, mimetype=mimetype)
        else:
            return func(*args, **kwargs)
    return decorated_function


@app.route('/ping/')
@jsonp
def ping():

    if 'user_id' in session:
        print "session ping: %s" % session
        return jsonify(logged_in='true')

    else:
        print "session ping: not logged in"
        return jsonify(logged_in="false")
于 2013-10-31T14:42:39.297 に答える