Django: Existe uma maneira segura e robusta para permitir-correntistas ter domínios separados em seu aplicativo?

StackOverflow https://stackoverflow.com/questions/2240812

Pergunta

Se eu quero que meus titulares da conta para ser capaz de ter os seus próprios sub-domínios e até mesmo seus próprios domínios completamente. Usando NGINX do meu servidor de proxy, eu deveria criar domínios para cada um na minha conf NGINX e ter meus clientes apontar seus domínios há ou há razões por que isso seria ruim? Além disso, se eu fizer isso, como posso passar específico da conta (conta em Django DB) informações com o pedido (ou seja, pedido de www.spamfoosaccount.com para o meu servidor, então eu procuração o pedido de volta para Apache, mas como faz o meu pedido saber que ele veio da conta de spamfoo a menos que eu olhar para request.HTTP_HOST (que pode ser o melhor caminho, mas eu não sei até que eu pergunte). Agradecemos antecipadamente.

Foi útil?

Solução

Para saber de qual domínio um pedido está vindo, você tem que usar request.META["HTTP_HOST"].

No entanto, não contam com esse valor para autenticação, pode ser forjado facilmente. A autenticação deve ser feito da maneira habitual com django.contrib.session. A pedido de um domínio específico / subdomínio não deve ter mais privilégios / direitos, mesmo quando o pedido contém uma sessão autenticada. Privilégios deve ser dada aos usuários / grupos de usuários, não para domínios.

Note que as sessões do navegador Não é possível Cross segundo nível-domínios (por exemplo, cookie de sessão de foo.com wil não ser enviadas para bar.com), pode no entanto ser um * .foo.com de cookie para todos os subdomínios (se você explicitamente configurá-lo assim).

Permita que os usuários apontam seus registros de DNS para o IP do seu servidor, vamos rota NGINX o pedido com base no domínio para o seu back-end e fazer a autenticação normal em Django.

Sua pergunta:

Como o meu pedido de saber que veio da conta de spamfoo

Eu não sei as especificidades da sua aplicação, mas não importa se o pedido veio, mas que emitiu o pedido (por exemplo, um usuário autenticado). Você deve ter um modelo / campo que liga seus usuários para seus respectivos domínios. Quando um utilizador está ligado a apenas um domínio, o aplicativo deve assumir o usuário veio a partir desse domínio. Quando um usuário está conectado a mais de um domínio, você pode olhar para request.META["HTTP_HOST"]. Se este valor corresponde a qualquer um dos domínios, o usuário é ligado a, está tudo bem, o valor pode ser forjado, mas por um usuário que esteja ligado a esse domínio, no entanto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top