2014-09-28 7 views
38

Flask'ta (bir Python modülü) çalışan bir seans almak için 0 şansım var.Gizli anahtar, flask oturumunda ayarlanmadı

RuntimeError: the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret.

Aşağıda benim sunucu kodu:

siteme bağladığınızda Şu anda bir şişe 3. parti kitaplığı Flask-Session

kullanıyorum, aşağıdaki hatayı alıyorum. Gördüğünüz gibi, uygulama gizli anahtarını ayarlıyorum. Gördüğünüz gibi, uygulama gizli anahtarını ayarlıyorum. Neyi yanlış yapıyorum?

Diğer oturum seçenekleri var mı?

Diğer bilgi: Linux Mint üzerinde Python 2.7 Running

Tam yapıştır:

Traceback (most recent call last): 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "/home/sean/code/misc/session/sessiontest.py", line 27, in hello 
    userId = verifySessionId() 
    File "/home/sean/code/misc/session/sessiontest.py", line 16, in verifySessionId 
    session['userId'] = nextId 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/werkzeug/local.py", line 341, in __setitem__ 
    self._get_current_object()[key] = value 
    File "/home/sean/code/misc/hangman/venv/lib/python2.7/site-packages/flask/sessions.py", line 126, in _fail 
    raise RuntimeError('the session is unavailable because no secret ' 
RuntimeError: the session is unavailable because no secret key was set. Set the secret_key on the application to something unique and secret. 
+0

İstisnanın * tam traceback'i nedir? –

+0

Ve 'Flask-Session' hangi sürümünü kullanıyorsunuz? Mevcut proje kaynağında bu istisnadan herhangi bir başvuru bulamıyorum (https://github.com/fengsp/flask-session). –

+0

@MartijnPieters Bunu nasıl anlayabilirim? Bunun için bir pip kurulumu yaptım – MintyAnt

cevap

41

istisna kullandığınızda Şişesi varsayılan oturum türü olduğunu NullSessionInterface seans uygulanması ile yükseltilir -Oturum, toplantı, celse. Bunun nedeni, Flask'ayapılandırmasını vermeyeceğinizdir; Modülünüzde global olarak ayarlamak için yeterli değildir.

Bu varsayılan Flask 0.10; Flask 0.8 veya 0.9 ile anlamlı olabilir, ancak mevcut versiyon bir hata sinyali olarak kullanılır. Senin durumunda, şimdi yanlış bir hata mesajı veriyor.

SESSION_TYPE yapılandırma seçeneğini başka bir seçeneğe ayarlayın. redis, memcached, filesystem veya mongodb'dan birini seçin.

filesystem'a ayarlamak en kolaydır;

if __name__ == "__main__": 
    app.secret_key = 'super secret key' 
    app.config['SESSION_TYPE'] = 'filesystem' 

    sess.init_app(app) 

    app.debug = True 
    app.run() 
+1

'u gördüğünüzde, SESSION_TYPE adını değiştirdiğimde hala çok şansım yok ... Belki de bu kütüphane güncelliğini yitirmiş olabilir mi? Şişe seansları için farklı bir yaklaşım önerir misiniz? Flask'in sitesinde listelenen parçacıkların bazılarını deneyebilirim, ama ben de orada bir tuğla duvara akın ettim. Bunlar için ayrı bir soru gönderebilirim. – MintyAnt

+0

@MintyAnt: SESSION_TYPE * ile adlandıracağınız şeyden emin değilsiniz *; Sizin için örnek bir yapılandırma ekledim. –

+1

@MintyAnt: Ah, onu küresel olarak ayarladınız, bu yeterli değil. Bunu, 'app' üzerinde yapılandırma olarak ayarlamanız gerekir. –

6

bu deneyin:

app = Flask(__name__) 
app.config['SESSION_TYPE'] = 'memcached' 
app.config['SECRET_KEY'] = 'super secret key' 
sess = Session() 

Ve alt kısmında app.secret_key atamayı kaldırmak yeterli varsayılan yapılandırma ek bağımlılıklar olmadan o işi için oraya yoktur.

+0

Bu bir şans, şans, aynı hata verdi. Eğer – MintyAnt

28

Set if __name__ == '__main__':

app.py gizli anahtar dışında:

from flask import Flask, session 

app = Flask(__name__) 
app.secret_key = "super secret key" 

@app.route("/") 
... 

if __name__ == '__main__': 
    app.debug = True 
    app.run() 

__name__ != '__main__' Eğer python app.py yerine uygulamanızı çalıştırmak için flask run kullanırsanız

.

+0

dilerseniz google takvim bilgilerine erişmek için oauth2.0 kullanarak bir amazon ec2 apache2 Ubuntu sunucuda bir flask uygulaması çalıştırıyorum eğer mesajlar kodunu güncelleyebilirsiniz. Bu cevap, çalışmasını sağlayan basit bir değişikliktir. Teşekkür ederim! – jas

+0

Teşekkürler! Bu benim için problemi çözdü, kabul edilen cevap gelmedi – rlsw

+0

Bu neden sorunu çözüyor? Çok garip görünüyor ... – Garrett