[zope-pt] Re: logout fora da zmi
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
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
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
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
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
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
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
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