2013-06-22 28 views
7

Çalıştığım kişisel bir proje için arka ucum ve jQuery olarak Flask kullanıyorum. Onların adı veya şifre benim/giriş yolu şöyle arka uç üzerindeFlask ve jQuery ile yeniden yönlendirme

vb yanlıştır kullanıcıyı söylerdim errorFuction olarak

$.ajax({ 
    type: "POST", 
    data: JSON.stringify(body), //username and password 
    contentType: 'application/json; charset=utf-8', 
    url: "/login", 
    success: successFunction, 
    error: errorFunction, 
    complete: completeFunction 
}); 

:

ben bunu yapmak istiyorum giriş yapmak

@app.route("/login", methods=['GET', 'POST']) 
def login(): 
    if(request.method == "POST"): 
     #retrieve the username and password sent 
     data = request.json 

     if(data is None or not 'username' in data or not 'password' in data): 
      abort(400) 
     else: 
      count = User.query.filter(User.username == data['username']).count() 
      if(count == 0): 
       abort(404) #that user doesnt exist 
      else: 
       passIsCorrect = User.query.filter(User.username == data['username'], 
                User.password == data['password']).count() 
       if(passIsCorrect): 
        session['user'] = data['username'] 
        return redirect(url_for('index')) 
       else: 
        abort(401) 

    else: 
     return render_template('login.html') 

Ancak istemci tarafında, tarayıcı yönlendirme yapmıyorsa ve tamamlama işlevinde yanıt nesnesinde bakarsak normalde dönüş olacağını görmek benim '/' route: 200 Tamam ve index.html şablonu.

Sorum şu: Ben müşteri yönlendirmesi yapabilirsiniz müdahale bazı yolu

var mı?

Sorunun, jquery'nin tarayıcıyı değil, isteği başlatması olduğunu varsayıyorum.

Bu sorunu çözmeye yönelik ilk denemem yanıtı make_response kullanarak kendim oluşturmak ve Konum üstbilgisini ayarlamaktı, ancak bu aynı davranışla sonuçlandı. Benim şu anki çözüm 200 döndürmektir ve ardından istemci window.location = "/" yapar, ama bu (index son nokta ile sadece içerik durumunda) Yönlendirilen içeriği döndürür çünkü

+4

Düzenli bir formun davranışını çoğaltmak istiyorsanız, neden AJAX kullanıyorsunuz? Ayrıca, düz metin şifrelerini saklamayın. Onları karıştır. – Blender

+0

Bu görev için [Flask-Login] 'e (https://github.com/maxcountryman/flask-login) bir göz atmak isteyebilirsiniz. Muhtemelen, çoğu self-built auth sisteminden daha güvenli olacak. –

+0

@Blender Sonunda – bio595

cevap

9

Yönlendirme çalışmaz: senin js ile

return url_for('index') 

ve süreci: Yani bütün Tamam (durum 200) yerine gerçek yönlendirme eğer yönlendirmek için bağlantı döndürebilir Onları onurlandırmayın. Çoğu kişi, kod 200'ü döndürerek ve JSON yanıtında yönlendirmek için bir URL göndererek kendi özel yönlendirme çözümlerini uygular. Bazı iyi örnekler için this question'a bakın.

Yan not olarak, giriş formunu ajax ile POST yapmak size gerçekten bir avantaj sağlamaz, tarayıcının POST formunu normal olarak bırakmasına izin verir ve Flask view işleviniz başarı ile yeni bir sayfaya yönlendirir veya yeniden yönlendirir Hataya ilişkin giriş sayfasına, muhtemelen kullanıcıyı kullanıcıya bildirmek için flash mesajıyla.

6

Hiçbir neden kullanımı ajax ile yönlendirme hacky görünüyor. tarayıcılar yapmak, ajax çağrılarda

var successFunction = function (data) { 
    // do something 
    window.location = data; 
};