web-dev-qa-db-pt.com

Redirecionar usuário se não estiver logado

você pode me ajudar com pouco problema?.

Eu preciso encontrar uma solução, como redirecionar o usuário para a página de login quando ele quer baixar o arquivo através de link no conteúdo do post, então, eu tenho alguns arquivos e eu quero que eles estejam disponíveis apenas para usuários que estão logados, caso contrário eles devem ser redirecionado na página de login, por exemplo, eu quero proibir o acesso (download) para todos os arquivos da pasta wp-content, lembre-se que eu tenho várias dessas pastas na raiz, tentei com o arquivo .htaccess mas não está funcionando

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^http://(www\.)?brt\.keezst\.com/ [NC]
RewriteCond %{REQUEST_URI} !hotlink\.(gif|png|jpg|doc|xls|pdf|html|htm|xlsx|docx|mp4|mov) [NC]
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule .*\.(gif|png|jpg|doc|xls|pdf|html|htm|xlsx|docx|mp4|mov)$ http://brt.keezst.com/ [NC]
2
Marko.dev

Obrigado a Marcelo Henriques answer eu descobri como fazer isso funcionar com o arquivo .htaccess e aqui está o código:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} ^.*(mp3|m4a|pdf|doc|xlsx|docx|xls)$
RewriteCond %{HTTP_COOKIE} !^.*wordpress_logged_in.*$ [NC]
RewriteRule (.*) http://website.com/login/

coloque o arquivo .htaccess na pasta que você deseja proteger de usuários não registrados e ele fará o trabalho, a última linha será redirecionada.

Portanto, se você quiser proteger o acesso a arquivos através de um link de âncora, a partir de uma pasta específica (uploads/media), faça o arquivo .htaccess dentro da pasta e cole este código. Se você quiser apenas 403 (proibido) altere RewriteRule (.*) http://website.com/login/ com [R=403,L]

1
Marko.dev

Eu não usaria o htaccess para isso.

O que eu faria é criar um modelo de 'página de download' e usá-lo para 'servir' os arquivos.

Ao fazer isso, posso verificar com is_user_logged_in()Codex e redirecionar com wp_login_url()Codex

Apenas faça:

if ( is_user_logged_in() ) :
//file link
else :
    wp_login_url();
endif;

Eu acho mais fácil e seguro fazer isso. Além disso, você pode até transformá-lo em um plug-in mais tarde e usá-lo em outros projetos ou continuar usando-o se alterar seu modelo de site.

4
Marcelo Henriques Cortez

Recentemente, eu queria o mesmo, exceto que queria proteger apenas as faturas.

Eu coloquei isso acima da parte do WordPress do .htaccess

<ifmodule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*wp-content/uploads/invoices/.*
RewriteRule ^wp-content/uploads/(invoices/.*)$ read-file.php?file=$1 [QSA,L]
</ifmodule>

Isso redireciona todos que querem ir para um arquivo no diretório de faturas para read-file.php, que está localizado no nível superior do WordPress também. read-file.php tem o seguinte código para verificar se o usuário está logado

<?php
// Load wp
require_once('wp-load.php');

// If user is logged in
if( ! is_user_logged_in() ) {

    // Redirect to home
    wp_redirect( url to your login page );
    exit;
}

// Additional checks here
// Headers to open or download the file
// readfile( $file );
// exit;

Espero que ajude!

1
Wilco