[zope-pt] Re: logout fora da zmi

2007-05-04 Por tôpico shockpilber
A respeito de logoff imediato, eu creio que seja cache !
Existe um produto plone (CacheSetup) que é possível você manusear cache 
sobre tudo que é carregado pelo servidor e consequentemente pelo 
cliente, creio que isso poderá ajudá-lo !
É possivel criar regras de tempo de cacheamento, de usuarios 
autenticados ou não , os objetos que serão cacheados, entre outros, é 
muito versátil !
Espero ter ajudado !



Re: [zope-pt] Re: logout fora da zmi

2007-03-16 Por tôpico Luciano Ramalho
Flávio, o que você descreve abaixo ocorre quando o usuário foi
autenticado pelo Zope via HTTP Basic authentication, e você tenta
deslogar via Plone. O Plone acha que consegue desfazer a autenticação,
mas na verdade não consegue, porque como eu disse antes, não existe
forma 100% garantida de um servidor HTTP obrigar o navegador a parar
de enviar uma senha que já foi usada com sucesso para uma autenticação
HTTP anterior.

Se você repetir o seu teste usando um usuário comum do Plone, criado
no acl_users do Plone e autenticado via form do Plone, provavelmente
vai constatar que o logout funciona perfeitamente, porque neste caso o
mecanismo de autenticação não terá sido HTTP Basic authentication e
sim o mecanismo de cookies.

[ ]s
Luciano

On 3/13/07, FLÁVIO GOMES DA SILVA LISBOA
[EMAIL PROTECTED] wrote:
 Depois que ele muda a senha ele chama o template logged_out e mostra a
 mensagem: Você não está mais autenticado. Mas a barra personal_tools
 continua mostrando o id do usuário, 'preferências' e o 'sair'.

 Quer dizer, ele continua autenticado.


Re: [zope-pt] Re: logout fora da zmi

2007-03-16 Por tôpico Luciano Ramalho
Dica geral sobre autenticação: só dá para testar estas coisas usando
navegadores diferentes e logins diferentes.

Em particular, o Firefox compartilha as autenticações entre todas as
instâncias que estiverem rodando, portanto se você estiver logado como
manager no Zope em uma delas, as outras instâncias também enviarão a
sua senha de manager a cada requisição feita ao mesmo Zope.

Para testar aplicações web no Linux e no Windows eu sempre uso o
Firefox e o Opera, pois ambos têm abas e são muito mais aderentes aos
padrões do W3C que o IE. Se funcionar nos dois, eu me dou por
satisfeito. Sempre tem alguém com mais paciência do que eu para fazer
as gambiarras necessárias para o IE.

[ ]s
Luciano


Re: [zope-pt] Re: logout fora da zmi

2007-03-13 Por tôpico Luciano Ramalho
Não existe uma boa maneira de um servidor desfazer a autenticação de
um usuário que se logou via HTTP Basic Authentication (o método padrão
do HTTP, usado pelo Zope mas não pelo Plone).

O motivo é que no protocolo HTTP não existe o conceito de sessão.
Qualquer sistema Web que implementa sessões o faz se a ajuda do
protocolo, em geral usando cookies ou identificadores de sessão
apendados à URL.

Quem gerencia o login no HTTP Básico é o navegador. É por isso,
inclusive, que quem pede a senha é  navegador (exibindo uma caixa de
diálogo). Quando se usa algum mecanismo de sessão, a autenticação não
é feita numa caixa de diálogo gerada pelo navegador, e sim num
formulário HTML. No caso da autenticação básica, não existe uma forma
100% garantida do servidor dizer ao navegador para deixar de enviar a
senha, o que simularia um logoff. Esta situação simplesmente não é
prevista no protocolo HTTP.

Na autenticação por cookies, o servidor pode enviar uma mensagem para
o browser deletar o cookie da sessão. Se a sessão é mantida via um
identificador nas URLs, novamente o servidor tem controle, pois é ele
que gera as URLs dos links que o navegador usa para navegar.

Resumindo, se a sua aplicação exige que o usuário possa se deslogar
facilmente, você será forçado a usar algum método de autenticação por
sessão, como faz o Plone.

[ ]s
Luciano


[zope-pt] Re: logout fora da zmi

2007-03-13 Por tôpico FLÁVIO GOMES DA SILVA LISBOA
Bem, estou usando o Plone. Aliás, o grande desafio que tenho há alguns
meses é aproveitar essa ferramenta e seus recursos para fazer um
portal de verdade.
O usuário não deve se deslogar facilmente. Eu quero abortar o
usuário, dado um evento certo, no caso, alteração da senha após
primeiro acesso.
Se ele realmente é orientado a objetos, então deve haver alguém para
quem eu peço por favor, deslogue. Se ele faz isso quando clico num
link, então pode fazer se eu enviar uma requisição sem interferência
do usuário.
Deixe ver se eu entendi, eu vou ter de esvaziar ou destruir o
dicionário SESSION?

--- Em zope-pt@yahoogrupos.com.br, Luciano Ramalho [EMAIL PROTECTED]
escreveu

 Não existe uma boa maneira de um servidor desfazer a autenticação de
 um usuário que se logou via HTTP Basic Authentication (o método padrão
 do HTTP, usado pelo Zope mas não pelo Plone).
 
 O motivo é que no protocolo HTTP não existe o conceito de sessão.
 Qualquer sistema Web que implementa sessões o faz se a ajuda do
 protocolo, em geral usando cookies ou identificadores de sessão
 apendados à URL.
 
 Quem gerencia o login no HTTP Básico é o navegador. É por isso,
 inclusive, que quem pede a senha é  navegador (exibindo uma caixa de
 diálogo). Quando se usa algum mecanismo de sessão, a autenticação não
 é feita numa caixa de diálogo gerada pelo navegador, e sim num
 formulário HTML. No caso da autenticação básica, não existe uma forma
 100% garantida do servidor dizer ao navegador para deixar de enviar a
 senha, o que simularia um logoff. Esta situação simplesmente não é
 prevista no protocolo HTTP.
 
 Na autenticação por cookies, o servidor pode enviar uma mensagem para
 o browser deletar o cookie da sessão. Se a sessão é mantida via um
 identificador nas URLs, novamente o servidor tem controle, pois é ele
 que gera as URLs dos links que o navegador usa para navegar.
 
 Resumindo, se a sua aplicação exige que o usuário possa se deslogar
 facilmente, você será forçado a usar algum método de autenticação por
 sessão, como faz o Plone.
 
 [ ]s
 Luciano





Re: [zope-pt] Re: logout fora da zmi

2007-03-13 Por tôpico Fernando Correa Neto
Opa.

On 3/13/07, FLÁVIO GOMES DA SILVA LISBOA
[EMAIL PROTECTED] wrote:






 Bem, estou usando o Plone. Aliás, o grande desafio que tenho há alguns
  meses é aproveitar essa ferramenta e seus recursos para fazer um
  portal de verdade.
  O usuário não deve se deslogar facilmente. Eu quero abortar o
  usuário, dado um evento certo, no caso, alteração da senha após
  primeiro acesso.
  Se ele realmente é orientado a objetos, então deve haver alguém para
  quem eu peço por favor, deslogue. Se ele faz isso quando clico num
  link, então pode fazer se eu enviar uma requisição sem interferência
  do usuário.
  Deixe ver se eu entendi, eu vou ter de esvaziar ou destruir o
  dicionário SESSION?

Retirado do script logout fo plone:

from Products.CMFCore.utils import getToolByName

try:
context.acl_users.logout(context.REQUEST)
except:
pass  # XXX we expect Unauthorized, but why do we do a bare except then?

REQUEST = context.REQUEST


# Invalidate existing sessions, but only if they exist.
sdm = getToolByName(context, 'session_data_manager', None)
if sdm is not None:
session = sdm.getSessionData(create=0)
if session is not None:
session.invalidate()

from Products.CMFPlone import transaction_note
transaction_note('Logged out')

target_url = REQUEST.URL1
# Double '$' to avoid injection into TALES
target_url = target_url.replace('$','$$')
target_url += '/logged_out'
return state.set(next_action='redirect_to:string:' + target_url )

Advinha onde é que ele 'desloga' o usuário? ;)

[]'s
Fernando

  --- Em zope-pt@yahoogrupos.com.br, Luciano Ramalho [EMAIL PROTECTED]
  escreveu
  
   Não existe uma boa maneira de um servidor desfazer a autenticação de
   um usuário que se logou via HTTP Basic Authentication (o método padrão
   do HTTP, usado pelo Zope mas não pelo Plone).
  
   O motivo é que no protocolo HTTP não existe o conceito de sessão.
   Qualquer sistema Web que implementa sessões o faz se a ajuda do
   protocolo, em geral usando cookies ou identificadores de sessão
   apendados à URL.
  
   Quem gerencia o login no HTTP Básico é o navegador. É por isso,
   inclusive, que quem pede a senha é  navegador (exibindo uma caixa de
   diálogo). Quando se usa algum mecanismo de sessão, a autenticação não
   é feita numa caixa de diálogo gerada pelo navegador, e sim num
   formulário HTML. No caso da autenticação básica, não existe uma forma
   100% garantida do servidor dizer ao navegador para deixar de enviar a
   senha, o que simularia um logoff. Esta situação simplesmente não é
   prevista no protocolo HTTP.
  
   Na autenticação por cookies, o servidor pode enviar uma mensagem para
   o browser deletar o cookie da sessão. Se a sessão é mantida via um
   identificador nas URLs, novamente o servidor tem controle, pois é ele
   que gera as URLs dos links que o navegador usa para navegar.
  
   Resumindo, se a sua aplicação exige que o usuário possa se deslogar
   facilmente, você será forçado a usar algum método de autenticação por
   sessão, como faz o Plone.
  
   [ ]s
   Luciano
  




[zope-pt] Re: logout fora da zmi

2007-03-13 Por tôpico FLÁVIO GOMES DA SILVA LISBOA
Ah, sim. Eu já havia suposto que se usasse o código do script logout
conseguiria abortar o usuário. Mas o resultado foi parcial.

Assim que o usuário se loga pela primeira vez, eu redireciono ele para
um formulário de alteração de senha (cópia do password_form ) que vai
submeter para um script python chamado password_change_logoff. Esse
contém o context.acl_users.logout e o trecho que invalida a sessão. 

Depois que ele muda a senha ele chama o template logged_out e mostra a
mensagem: Você não está mais autenticado. Mas a barra personal_tools
continua mostrando o id do usuário, 'preferências' e o 'sair'.

Quer dizer, ele continua autenticado.

--- Em zope-pt@yahoogrupos.com.br, Fernando Correa Neto [EMAIL PROTECTED]
escreveu

 Opa.
 
 On 3/13/07, FLÁVIO GOMES DA SILVA LISBOA
 [EMAIL PROTECTED] wrote:
 
 
 
 
 
 
  Bem, estou usando o Plone. Aliás, o grande desafio que tenho há alguns
   meses é aproveitar essa ferramenta e seus recursos para fazer um
   portal de verdade.
   O usuário não deve se deslogar facilmente. Eu quero abortar o
   usuário, dado um evento certo, no caso, alteração da senha após
   primeiro acesso.
   Se ele realmente é orientado a objetos, então deve haver alguém para
   quem eu peço por favor, deslogue. Se ele faz isso quando clico num
   link, então pode fazer se eu enviar uma requisição sem interferência
   do usuário.
   Deixe ver se eu entendi, eu vou ter de esvaziar ou destruir o
   dicionário SESSION?
 
 Retirado do script logout fo plone:
 
 from Products.CMFCore.utils import getToolByName
 
 try:
 context.acl_users.logout(context.REQUEST)
 except:
 pass  # XXX we expect Unauthorized, but why do we do a bare
except then?
 
 REQUEST = context.REQUEST
 
 
 # Invalidate existing sessions, but only if they exist.
 sdm = getToolByName(context, 'session_data_manager', None)
 if sdm is not None:
 session = sdm.getSessionData(create=0)
 if session is not None:
 session.invalidate()
 
 from Products.CMFPlone import transaction_note
 transaction_note('Logged out')
 
 target_url = REQUEST.URL1
 # Double '$' to avoid injection into TALES
 target_url = target_url.replace('$','$$')
 target_url += '/logged_out'
 return state.set(next_action='redirect_to:string:' + target_url )
 
 Advinha onde é que ele 'desloga' o usuário? ;)
 
 []'s
 Fernando
 
   --- Em zope-pt@yahoogrupos.com.br, Luciano Ramalho ramalho@
   escreveu
   
Não existe uma boa maneira de um servidor desfazer a
autenticação de
um usuário que se logou via HTTP Basic Authentication (o método
padrão
do HTTP, usado pelo Zope mas não pelo Plone).
   
O motivo é que no protocolo HTTP não existe o conceito de sessão.
Qualquer sistema Web que implementa sessões o faz se a ajuda do
protocolo, em geral usando cookies ou identificadores de sessão
apendados à URL.
   
Quem gerencia o login no HTTP Básico é o navegador. É por isso,
inclusive, que quem pede a senha é  navegador (exibindo uma
caixa de
diálogo). Quando se usa algum mecanismo de sessão, a
autenticação não
é feita numa caixa de diálogo gerada pelo navegador, e sim num
formulário HTML. No caso da autenticação básica, não existe uma
forma
100% garantida do servidor dizer ao navegador para deixar de
enviar a
senha, o que simularia um logoff. Esta situação simplesmente
não é
prevista no protocolo HTTP.
   
Na autenticação por cookies, o servidor pode enviar uma
mensagem para
o browser deletar o cookie da sessão. Se a sessão é mantida via um
identificador nas URLs, novamente o servidor tem controle, pois
é ele
que gera as URLs dos links que o navegador usa para navegar.
   
Resumindo, se a sua aplicação exige que o usuário possa se deslogar
facilmente, você será forçado a usar algum método de
autenticação por
sessão, como faz o Plone.
   
[ ]s
Luciano
   
 
 





[zope-pt] Re: logout fora da zmi

2007-03-07 Por tôpico FLÁVIO GOMES DA SILVA LISBOA
Tentei usar o manage_zmi_logout desta maneira:

context.manage_zmi_logout(REQUEST,REQUEST.RESPONSE)

Mas o usuário continua autenticado.

Pela regra de negócio, o portal que estou desenvolvendo tem de obrigar
o novo usuário, em seu primeiro acesso, a alterar a senha e dar o
logoff, pra forçar ele a entrar com a nova senha.

Criei cópias do password_form e plone_change_password com sufixos
_logoff para fazer isso. A linha acima foi colocada antes do return do
script plone_change_password_logoff.

Logo depois que a senha alterada, o login_form é exibido, mas ele o
usuário continua autenticado, tanto que os links da barra
personaltools (id do usuário, minha pasta, preferências, sair)
continua aparecendo e eles funcionam.

Vi que o assunto morreu aqui, mas gostaria de saber como (se) isso foi
contornado. Uso a versão 2.9.5. Não por gosto, mas por decisão do projeto.

--- Em zope-pt@yahoogrupos.com.br, [EMAIL PROTECTED] escreveu

 Realmente Jean, depois de uma boa googlada, verifikei que, se nao
invocarmos o
 metodo manage_zmi_logout, teremos que morrer nos produtos :
 
 CookieCrumbler ou LoginManager ou exUserFolder, que são baseados em
cookies.
 
 Agora quanto ao metodo manage_zmi_logout, quando invoco o mesmo, noto 
 que a tela
 de login eh recarregada e aparentemente quando tento entrar com um 
 outro usuario
 cadastrado na acl_users o mesmo nao autentica.
 Engraçado que apos diversas tentativas ou cancelando o login tenho a
seguinte
 mensagem You have been logged out. e voltando com um back do 
 navegador e f5 (
 refresh ) noto que o usuario que anteriormente nao logava, se
encontra logado.
 
 O que me diz?
 
 []`s
 
 Renato
 
 
 Quoting Jean Rodrigo Ferri [EMAIL PROTECTED]:
 
  [EMAIL PROTECTED] escreveu:
  Ola pessoal,
 
  Olá Renato,
 
  Como posso criar uma chamada dmtl ou um python script que force
um logout do
  usuario autenticado? ( AUTHENTICATED_USER )
 
  Terei que fechar a sessao?
  Expirar os cookies do navegador?
 
  Estou usando a versao Zope-2.10.1, pelo que andei lendo no Zope3
os caras ja
  disponibilizam uma funcao para este problema.
 
  Como você faria para efetuar logout no Zope2? Iria na barra azul
no topo
  da ZMI e escolheria a opção 'Logout', certo?
 
  Pois bem, se você mostrar o código HTML da barra azul, verá no
form isso:
 
  option value=manage_zmi_logoutLogout/option
 
  Ou seja, quando você seleciona a opção 'Logout' o método
  'manage_zmi_logout' será invocado a partir do contexto. Então, no seu
  Script Python ou DTML Method invoque este método e voilá.
 
  Abraço,
 
  --
  Jean Ferri
 
 
  Para enviar uma mensagem: zope-pt@yahoogrupos.com.br
  Para desistir envie uma mensagem em branco para: 
  [EMAIL PROTECTED]
  Links do Yahoo! Grupos