質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1406閲覧

OAuth認証をherokuでやると'NoneType' object has no attributes 'encode'と返ってきた

kkp6421

総合スコア4

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Heroku

HerokuはHeroku社が開発と運営を行っているPaaSの名称です。RubyやNode.js、Python、そしてJVMベース(Java、Scala、Clojureなど)の複数のプログラミング言語をサポートしている。

OAuth

OAuth(Open Authorization)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/02/16 13:53

前提・実現したいこと

docker-composeとflaskでTwitterと連携した質問サイトを作っています。
rauthのOAuth1Serviceを利用してTwitterのOAuth認証を実装しローカルで動くことを確認し
試しにherokuにデプロイしたら下記のようなエラー遭遇しました。

発生している問題・エラーメッセージ

2020-02-16T13:25:37.223045+00:00 app[web.1]: [2020-02-16 13:25:37,222] ERROR in app: Exception on /oauth/twitter [GET] 2020-02-16T13:25:37.223056+00:00 app[web.1]: Traceback (most recent call last): 2020-02-16T13:25:37.223057+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 2292, in wsgi_app 2020-02-16T13:25:37.223057+00:00 app[web.1]: response = self.full_dispatch_request() 2020-02-16T13:25:37.223058+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1815, in full_dispatch_request 2020-02-16T13:25:37.223059+00:00 app[web.1]: rv = self.handle_user_exception(e) 2020-02-16T13:25:37.223059+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1718, in handle_user_exception 2020-02-16T13:25:37.223060+00:00 app[web.1]: reraise(exc_type, exc_value, tb) 2020-02-16T13:25:37.223060+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise 2020-02-16T13:25:37.223061+00:00 app[web.1]: raise value 2020-02-16T13:25:37.223061+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1813, in full_dispatch_request 2020-02-16T13:25:37.223062+00:00 app[web.1]: rv = self.dispatch_request() 2020-02-16T13:25:37.223062+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 1799, in dispatch_request 2020-02-16T13:25:37.223063+00:00 app[web.1]: return self.view_functions[rule.endpoint](**req.view_args) 2020-02-16T13:25:37.223064+00:00 app[web.1]: File "app.py", line 67, in oauth_authorize 2020-02-16T13:25:37.223064+00:00 app[web.1]: params={'oauth_callback': url_for('oauth_callback', provider='twitter', _external=True)} 2020-02-16T13:25:37.223064+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/rauth/service.py", line 242, in get_request_token 2020-02-16T13:25:37.223065+00:00 app[web.1]: r = self.get_raw_request_token(method=method, **kwargs) 2020-02-16T13:25:37.223065+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/rauth/service.py", line 215, in get_raw_request_token 2020-02-16T13:25:37.223066+00:00 app[web.1]: **kwargs) 2020-02-16T13:25:37.223066+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/rauth/session.py", line 181, in request 2020-02-16T13:25:37.223067+00:00 app[web.1]: req_kwargs) 2020-02-16T13:25:37.223067+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/rauth/oauth.py", line 144, in sign 2020-02-16T13:25:37.223067+00:00 app[web.1]: key = self._escape(consumer_secret) + b'&' 2020-02-16T13:25:37.223068+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/rauth/oauth.py", line 35, in _escape 2020-02-16T13:25:37.223068+00:00 app[web.1]: return quote(self._ensure_unicode(s), safe='~').encode('utf-8') 2020-02-16T13:25:37.223069+00:00 app[web.1]: File "/usr/local/lib/python3.6/site-packages/rauth/oauth.py", line 25, in _ensure_unicode 2020-02-16T13:25:37.223070+00:00 app[web.1]: return s.encode('utf-8') 2020-02-16T13:25:37.223070+00:00 app[web.1]: AttributeError: 'NoneType' object has no attribute 'encode' 2020-02-16T13:25:37.223579+00:00 app[web.1]: 10.5.155.200 - - [16/Feb/2020 13:25:37] "GET /oauth/twitter HTTP/1.1" 500 -

該当のソースコード

python

1@app.route('/oauth/twitter') 2def oauth_authorize(): 3 if not current_user.is_anonymous: 4 return redirect(url_for('index')) 5 else: 6 request_token = service.get_request_token( 7 params={'oauth_callback': url_for('oauth_callback', provider='twitter', _external=True)} 8 ) 9 session['request_token'] = request_token 10 return redirect(service.get_authorize_url(request_token[0]))

補足情報(FW/ツールのバージョンなど)

ここに現在実装中のコードをあげておきます。
https://github.com/kkp6421/flask-question
エラーの見当がある方や補足情報が欲しいという場合是非コメントしてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

python

1url_for('oauth_callback', provider='twitter', _external=True) 2

で帰ってくる絶対パスが
https://〇〇〇〇.herokuapp.com/oauth/twitter/callback?provider=twitterじゃなくて
http://localhost/oauth/twitter/callback?provider=twitterになっていたのでその部分は
urlを直書きすると上手く動きました。
お騒がせしました。

投稿2020/02/16 18:48

kkp6421

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

python

1url_for('oauth_callback', provider='twitter', _external=True) 2

で帰ってくる絶対パスが
https://〇〇〇〇.herokuapp.com/oauth/twitter/callback?provider=twitterじゃなくて
http://localhost/oauth/twitter/callback?provider=twitterになっていたのでその部分は
urlを直書きすると上手く動きました。
お騒がせしました。

投稿2020/02/16 17:17

kkp6421

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問