2015-06-03 1 views
3

У меня есть сайт Wordpress на xroads.comКак требовать вход в Wordpress для просмотра подкаталога на сайте Wordpress?

Внутри есть папка под названием «_warehouse», который содержит приложение PHP CRUD

Можно ли требовать ту же страницу входа в систему я использую для Сайт Wordpress для просмотра каталога _warehouse?

Заранее благодарен!

enter image description here

ответ

0

Если пользователь уже имеет учетную запись в WordPress:

перенаправляет пользователя на форму логина. Используйте wp_login_url с параметром $redirect, чтобы установить, где они идут после входа в систему:

$loginUrl = wp_login_url(home_url('_warehouse')); 

https://codex.wordpress.org/Function_Reference/wp_login_url

Затем используйте wp_login действие вручную аутентификации пользователя в приложении:

add_action('wp_login', function($username, $user) { 
    // Log user into external application 
}, 10, 2); 

https://codex.wordpress.org/Plugin_API/Action_Reference/wp_login

Фактически установка пользователя как «зарегистрированного i n "будет зависеть от того, как настроено ваше внешнее приложение. Это может быть так же просто, как установить переменную сеанса, а затем проверить, установлено ли это в вашем приложении хранилища.

+0

Попробуй эту кнопку и дайте вам знать, как все прошло! Спасибо! –

-1

Вот одно из возможных решений (используйте на свой страх и риск).

Создать .htaccess файл в каталоге _warehouse со следующим содержанием:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} -f 
RewriteRule ^.*$ wplogin.php [NC,L] 

Это будет перенаправлять все запросы на файлы, которые существуют в _warehouse и поддиректории в _warehouse/wplogin.php

Создать _warehouse/wplogin.php со следующим содержимым :

<?php 

// Edit this path to include wp-load.php from your WordPress directory 
require_once '../wp-load.php'; 

if (!is_user_logged_in()) { 
    // if user is not logged in, set redirect URI, show WP login 
    $_REQUEST['redirect_to'] = $_SERVER['REQUEST_URI']; 
    require_once '../wordpress/wp-login.php'; 
    exit; 
} else { 
    // user is logged into wordpress - show the requsted file. 
    require_once $_SERVER['DOCUMENT_ROOT'] . $_SERVER['REQUEST_URI']; 
} 

И, наконец, и очень важно, добавьте в файл wp-config.php:

define('COOKIEPATH', '/'); 

Это потому, что WordPress будет устанавливать куки с пути, указанного. Это предотвратит распознавание файлов cookie для входа в _warehouse.

И, как я уже сказал, используйте на свой страх и риск. Это не идеально, но, вероятно, это самый быстрый способ добиться того, чего вы хотите, и будете обрабатывать многие случаи.

Примечание: это не касается каталогов без индекса. Если Apache Options +Indexes включен, кто-то может просмотреть список каталогов в _warehouse, но если они попытаются получить доступ к нему, он отобразит страницу входа.

+0

Будьте осторожны, если вы используете пользовательский ввод для включения файлов: http://en.wikipedia.org/wiki/File_inclusion_vulnerability –

+0

@mtinsley Определенно проблема, но переписывание .htaccess гарантирует, что REQUEST_URI является допустимым файлом на сервере поэтому $ _SERVER ['REQUEST_URI'] должен быть довольно нормальным, а $ _SERVER ['DOCUMENT_ROOT'] впереди устранит множество эксплойтов. Для безопасного добавления сценарий PHP может дезактивировать REQUEST_URI и выполнять дополнительные проверки. – drew010

+0

@drew Мое текущее приложение Htaccess имеет Rewrite Rule, как этот 'RewriteRule^(. *) $ Index.php [QSA, L]' App был сделан на тонкий PHP и используя Active Record. Должен ли я добавить тот, который вы предоставили дополнительно? –

Смежные вопросы