2017-11-28 1 views
0

Ich lerne Django und versuche, meine erste Webapp abzuschließen.Verwendung von https als Standard mit Django-Projekt

Ich benutze shopify api & boilder Platte (starter cod e) und habe ein Problem mit dem letzten Schritt der Auth.

Insbesondere die Umleitungs-URL - es ist mit HTTP: // wenn es nicht sollte, und ich weiß nicht, wie es zu ändern ..

#in my view 

def authenticate(request): 

    shop = request.GET.get('shop') 

    print('shop:', shop) 
    if shop: 
     scope = settings.SHOPIFY_API_SCOPE 
     redirect_uri = request.build_absolute_uri(reverse('shopify_app_finalize')) #try this with new store url? 
     print('redirect url', redirect_uri) # this equals http://myherokuapp.com/login/finalize/ 
     permission_url = shopify.Session(shop.strip()).create_permission_url(scope, redirect_uri) 
     return redirect(permission_url) 

    return redirect(_return_address(request)) 

was ein Problem ist, weil meine App nutzt die Embedded Shopify SDK, das diesen Fehler an der Stelle dieser Anfrage verursacht Refused to frame 'http://my.herokuapp.com/' because it violates the following Content Security Policy directive: "child-src 'self' https://* shopify-pos://*". Note that 'frame-src' was not explicitly set, so 'child-src' is used as a fallback.

Wie ändere ich die URL, um HTTPS zu verwenden?

Vielen Dank im Voraus. Bitte lassen Sie mich wissen, ob ich irgendwelche anderen Details teilen kann, aber mein Code ist praktisch identisch mit dem starter code

Antwort

0

Dies ist, was die Django doc sagt über build_absolute_uri:

Mixing HTTP und HTTPS auf dem gleichen Gelände wird abgeraten Daher wird build_absolute_uri() immer einen absoluten URI mit dem selben Schema erzeugen, das die aktuelle Anfrage hat. Wenn Sie Benutzer zu HTTPS umleiten müssen, ist es am besten, Ihren Webserver den gesamten HTTP-Datenverkehr umleiten zu HTTPS.

So können Sie zwei Dinge tun:

  1. Stellen Sie sicher, Ihre Website komplett auf HTTPS läuft (bevorzugte Option): Richten Sie Ihre Web-Server HTTPS zu verwenden, finden Sie in der Heroku Dokumentation darüber, wie dies zu tun . Django wird automatisch HTTPS für request.build_absolute_uri verwenden, wenn die eingehende Anfrage auf HTTPS läuft. Ich bin nicht sicher, was in der shop Parameter übergeben wird, aber wenn es persönliche Daten enthält, würde ich vorschlagen, HTTPS trotzdem zu verwenden.

  2. Erstellen Sie die URL selbst:

    url = "https://{host}{path}".format(
        host = request.get_host(), 
        path = reverse('shopify_app_finalize')) 
    

    Aber Sie müssen noch Ihren Server zu akzeptieren eingehende HTTPS-Anforderungen konfigurieren.

Verwandte Themen