Facebookのsigned_requestをデコードして、認証されていないユーザーにログインフォームを提供しようとしています。私のコードは次のとおりです。
def parse_signed_request(sr):
encoded_sig, payload = sr.split('.', 2)
data = json.loads(base64.b64decode( payload.replace('-_', '+/') ))
if not data['algorithm'].upper() == 'HMAC-SHA256':
raise ValueError('unknown algorithm {0}'.format(data['algorithm']))
return None
h = hmac.new(FB_APP_SECRET, digestmod=hashlib.sha256)
h.update(payload)
expected_sig = urlsafe_b64encode(h.digest()).replace('=', '')
if encoded_sig != expected_sig:
raise ValueError('bad signature')
return None
return data
私の問題は、このコードは、すでにログインしているユーザーに対しては正常に機能しますが、ログインしていないユーザーに対しては、b64decode で「不正なパディング」エラーが発生することです。ただし、ペイロードに「=」記号を埋め込むと、実際にログインしているかどうかに関係なく、すべてのユーザーが「ログイン済み」として認証を渡します。
誰か助けてくれませんか?