WP-login.php অক্ষম করুন বা পুনর্নির্দেশ করুন


10

লগ ইন করা বা না থাকা, পৌঁছনো থেকে দর্শনার্থীদের বাধা দেওয়ার কোনও উপায় আছে কি mysite.com/wp-login.php?

আমার একটি পৃথক লগইন ফর্ম রয়েছে যা আমাদের প্রয়োজন। আমি জানি যে আমি উত্পন্ন ফর্মটি পুনরায় স্টাইল করতে wp-loginপারি তবে এর সাথে আমার একেবারেই মোকাবেলা করতে হবে না। আমি বিভিন্ন ফিল্টার এবং হুক চেষ্টা করেছি এবং এটিকে পুনঃনির্দেশিত করার মতো মনে হচ্ছে না। আমি একটি .htaccessপুনর্নির্দেশও ব্যবহার করার চেষ্টা করেছি এবং আমি দেখতে পেয়েছি এটি কাজ করে তবে তারপরে এটি আমার কাস্টম লগইন / লগআউট ফর্মটিকে কাজ করা থেকে বাধা দেয়।

ধারনা?


আপনি কি সুরক্ষা কারণে করছেন? শুধু ডাব্লুপি-লগইন.এফপি-র জন্য লেখককে কেন প্রয়োগ করবেন না?
গাইয়া

আপনি কি বলতে চাইছেন তা আমি জানি না। দয়া করে কিছুটা প্রসারিত করুন। টিয়া।
jchwebdev

আপনার আলাদা লগইন ফর্মের প্রয়োজন কেন? নিরাপত্তার কারণে?
গাইয়া

আমরা দেখতে পাই যে আজকাল খুব বেশি লোক 'ডাব্লুপি-লগইন' সম্পর্কে সচেতন। আমরা বরং এটি এতটা সুস্পষ্ট হতে না চাই। আপনি কেবল আমাকে বলতে পারেন যে 'কেন প্রমাণিত করবেন না' মানে? টিআইএ
jchwebdev

উত্তর সরবরাহ দেখুন।
গাইয়া

উত্তর:


19

এই প্রশ্নটি সন্ধান করার পরে এবং কয়েকটি উত্তর পরীক্ষা করার পরে নীচে আমি উত্পাদন পরিবেশে যা ব্যবহার করছি তার একটি "ক্লিন আপ" সংস্করণ।

এই সংস্করণটি কোনও নোটিশ / ত্রুটি ফেলে দেয় না এবং পাসওয়ার্ড পুনরায় সেট করার জন্যও কাজ করে:

// Hook the appropriate WordPress action
add_action('init', 'prevent_wp_login');

function prevent_wp_login() {
    // WP tracks the current page - global the variable to access it
    global $pagenow;
    // Check if a $_GET['action'] is set, and if so, load it into $action variable
    $action = (isset($_GET['action'])) ? $_GET['action'] : '';
    // Check if we're on the login page, and ensure the action is not 'logout'
    if( $pagenow == 'wp-login.php' && ( ! $action || ( $action && ! in_array($action, array('logout', 'lostpassword', 'rp', 'resetpass'))))) {
        // Load the home page url
        $page = get_bloginfo('url');
        // Redirect to the home page
        wp_redirect($page);
        // Stop execution to prevent the page loading for any reason
        exit();
    }
}

এটি ডাব্লুপি-লগইনকে (ভাল) প্রতিরোধ করে বলে মনে হচ্ছে তবে চূড়ান্ত প্রস্থান () প্রকৃত লগইন ()টিকে যা ঘটায় তা আমরা আটকাতে বাধা দেখায় যা আমরা চাই না। আমরা চাই যে লোকেরা লগ ইন করতে সক্ষম হোক, কেবল কখনও ডাব্লুপি-লগইন স্ক্রিনটি দেখেন না। যদি তারা কোনও ভুল পিডাব্লু প্রবেশ করে তবে তা আমাদের কাস্টম লগইন পৃষ্ঠায় ফিরতে হবে।
jchwebdev

এটি সম্পাদিত হয়েছে এবং এটি এখন কাজ করছে: আপনাকে_আররে () করার আগে $ ক্রমটি পূরণ করা হয়েছে কিনা তা পরীক্ষা করে দেখতে হবে
সিমোথেসোরেরার

এটি আমার পক্ষে কাজ করে না। আমি এখনও লগ ইন করুন পারে।
মাইক

@ মাইক - আপনি কি নিশ্চিত আপনার হুক কাজ করছে / কাজ করছে? আপনি যদি echo "HERE";ফাংশনটির ভিতরে রাখেন তবে কী হবে ? এটি কি প্রতিধ্বনিত হয়?
এলোমেলো ব্যবহারকারীর_নামা

1
@ ক্যাল_বি হ্যাঁ, হুক ঠিকঠাক কাজ করছে। সমস্যাটি $_GET['action']আমার জন্য খালি। ফর্মটি পোস্ট করা হয়েছে /wp-login.php(ইউআরএলটিতে কোনও জিইটি ভেরিয়েবল ছাড়াই) এবং উত্সের দিকে তাকানো কোনও নামযুক্ত পুটও নেই action, তাই $_REQUEST['action']খালিও।
মাইক 22

10

আপনার থিমের ফাংশন.এফপি এ চেষ্টা করুন

add_action('init','custom_login');

function custom_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && !is_user_logged_in()) {
  wp_redirect('http://yoursite.com/');
  exit();
 }
}

আমার জন্য কাজ করছি তবে আমি সমস্যাগুলি লগ আউট করছি এবং কেন তা বুঝতে পারছি না
Androliyah

7
কারণ ডাব্লুপি-লগইন.এফপি হ্যান্ডলগুলি পাশাপাশি লগ আউটও করে।
ব্রায়ান ফেগার

হ্যাঁ, এটি আমার কাস্টম লগইন ফর্মটিকে অবরুদ্ধ করে। তবে যদি অনুরোধের ভার বা সম্ভবত রেফারারের জন্য নির্ভরযোগ্যভাবে পরীক্ষা করার কোনও উপায় ছিল? আইওউ: এটি একটি সূচনা পয়েন্ট হতে পারে। অন্য কেউ? টিআইএ --- জেসি
jchwebdev

আহ হ্যাঁ, ডাব্লুপি-লগইন লগ আউট পরিচালনা করে। হাঃ হাঃ হাঃ. যুক্তিযুক্ত। সম্ভবত একটি প্লাগইন সহ এই কোডটি যথেষ্ট হবে। আমি আর কী ব্যবহার করতে পারি তা আমাকে দেখতে দিন কারণ আমি ডাব্লুপি-লগইন ব্যবহার করে ঘৃণা করি।
Androliyah

আমার মনে হয় যে সমস্ত প্রয়োজনীয় প্রয়োজন তা হ'ল ডাব্লুপি-লগইন লোড হওয়ার সময় অনুরোধটির ভারগুলি পর্যবেক্ষণ করা। আমার কাছে এমন কোনও মেশিন নেই যা এই মুহূর্তে এটি করতে পারে।
জেচওদেবদেব

4

লগআউট ক্রিয়াটির জন্য একটি জিইটি ভার যোগ করুন এবং এটি দুর্দান্ত কাজ করে।

add_action('init','custom_login');

function custom_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && $_GET['action']!="logout") {
  wp_redirect('http://YOURSITE.com/');
  exit();
 }
}

এখনও অবধি, এটি আমরা যা চাই তার নিকটতম। যদি আমরা প্রস্থান () সরিয়ে এবং wp_redirect কে আমাদের কাস্টম লগইন পৃষ্ঠায় পরিবর্তন করি তবে মনে হয় এটি কাজ করবে।
jchwebdev

3

আমি বেশ কিছু সময়ের জন্য ওয়ার্ডপ্রেস প্লাগইনটির পুনরায় নাম wp-login.php ব্যবহার করছি।

এটি আপনাকে wp-login.phpঅন্য কোনও পথে স্যুইচ করতে দেয় । আমি আমার লগইন পৃষ্ঠাগুলিতে বট স্ল্যাম করছিলাম এবং এখন আমি শূন্য হিট।


1

ডাব্লুপি-লগইন লগইন, লগআউট, পুনরায় তালিকাভুক্তকরণ, পাসওয়ার্ড পুনরায় সেট করা এবং পুনরুদ্ধার পরিচালনা করে। ধরে নিচ্ছি আপনি ফ্রন্ট-এন্ড লগইন পৃষ্ঠাটি পরিবর্তন করতে চান। আপনি নিম্নলিখিত কোডটি নিরাপদে ব্যবহার করতে পারেন:

function custom_login_page() {
 $new_login_page_url = home_url( '/login/' ); // new login page
 global $pagenow;
 if( $pagenow == "wp-login.php" && $_SERVER['REQUEST_METHOD'] == 'GET') {
    wp_redirect($new_login_page_url);
    exit;
 }
}

if(!is_user_logged_in()){
 add_action('init','custom_login_page');
}

এই কোড স্নিপেট করবে:

  1. সমস্ত ওয়েবসাইট দর্শকদের নতুন লগইন পৃষ্ঠায় পুনর্নির্দেশ করুন।
  2. লগআউট কোনও সমস্যা ছাড়াই কাজ করবে
  3. আপনার কাস্টম লগইন পৃষ্ঠায় আপনাকে কাস্টম লগইন, নিবন্ধকরণ এবং পাসওয়ার্ড পুনরায় সেট করার ফর্মগুলি তৈরি করতে হবে, তবে আপনার কাস্টম ফর্মগুলি ডাব্লুপি-লগইন করতে নিরাপদে ডেটা পোস্ট করতে পারে post পোস্টের অনুরোধগুলি পুনর্নির্দেশ না করা হিসাবে এইচপিপি।

1
home_url()ইতিমধ্যে একটি নেতৃস্থানীয় স্ল্যাশ যুক্ত করেছে, সুতরাং এর প্রয়োজন নেই। এছাড়াও $pagenow(ক) একটি বিশ্বব্যাপী যা কেবল অ্যাডমিনে উপস্থিত থাকে (এবং হতে পারে লগইন) এবং (খ) get_current_screen()সম্পত্তি চেক সহ প্রতিস্থাপন করা উচিত ।
কায়সার

1
// https://codex.wordpress.org/Plugin_API/Filter_Reference/login_url#Examples
add_filter('login_url', 'custom_login_url', 10, 3);

function custom_login_url($login_url, $redirect, $force_reauth) {
    return home_url('/login/?redirect_to=' . $redirect);
}

এটি বাজে wp-login ফর্মের পরিবর্তে / লগইনে পুনর্নির্দেশ করবে to


হুম মজাদার ধারণা, তবে দয়া করে ব্যাখ্যা করুন কীভাবে / কেন এটি কাজ করে
মার্ক কাপলুন

এটি কাজ করবে না। এই login_url () এর মাধ্যমে লগইন ইউআরএলের অনুরোধগুলি ফিল্টার করে, এটি কাউকে নিজে wp-login.php টাইপ করতে বাধা দেয় না।
ম্যাট

0

যদি আপনার উদ্দেশ্যটি wp-login.phpঅপরিচিত লোকেরা এমনকি এটি দেখতে সক্ষম হওয়া থেকে রক্ষা করা হয় তবে এটি করার সহজতম উপায় হ'ল অ্যাক্সেসের জন্য অনুমোদন (বুনিয়াদি লেখক) প্রয়োজন wp-login.php

ইন ও Apache, প্রমাণীকরণ htaccess সংমিশ্রণ এবং একটি পাসওয়ার্ড ফাইল মাধ্যমে বাস্তবায়িত হয় । প্রথমবার, ব্রাউজার সেশনের মধ্যে, যে কেউ অ্যাক্সেস করার চেষ্টা করে wp-login.phpতাদের একটি ব্যবহারকারী নাম এবং পাসওয়ার্ড (ওয়ার্ডপ্রেস লগইনের আগে) প্রবেশ করার অনুরোধ জানানো হবে।

জিনিসগুলি সহজ করার জন্য, এই ব্যবহারকারীর নাম এবং পাসওয়ার্ডটি আপনি যে সকল ব্যক্তির অ্যাক্সেস দিতে চান তার পক্ষে একই হতে পারে wp-login.php, কারণ প্রথম লেখকের ডায়ালগ বাক্সটি সাফল্যের সাথে পাস করার পরে তাদের তাদের ওয়ার্ডপ্রেস লগইনটি প্রবেশ করতে হবে।


মজাদার. আমি ধরে নিচ্ছি যে 'প্রম্পট' শংসাপত্র প্রবেশের জন্য ব্রাউজারের মডেল পপআপ। আমি মনে করি এটি বিভ্রান্তির কারণ হবে। আদর্শভাবে আমি যা চাই তা হ'ল URL-- কিছুই না করার জন্য... বা সম্ভবত হোম পৃষ্ঠাতে পুনর্নির্দেশ। তবে তার জন্য ধন্যবাদ। প্রতিদিন নতুন কিছু শিখুন!
jchwebdev

আপনি যা করছেন বলে মনে করছেন তা হ'ল "সুরক্ষার মাধ্যমে অস্পষ্টতা"। কিন্তু বাস্তবে আপনি কেবল অস্পষ্টতা করছেন, এবং এটি ভয়ানক। এটা ব্যবহার করোনা. অথথ সুরক্ষা। প্রবেশদ্বারটি গোপন করা অস্পষ্টতা। সিকিউরিটি.স্ট্যাকেক্সেঞ্জাওয়েজ
সেকশনস /

1
অন্য কথায়, এমনকি যদি আপনি ডাব্লুপি-লগইনের অবস্থান পরিবর্তন করেন তবে আপনার এখনও লেখকটি ব্যবহার করা দরকার: "আমার সংযোগটি সুরক্ষিত রাখতে আমার কি 22 থেকে পোর্ট 2222 এ সার্ভার পরিবর্তন করার উপর নির্ভর করা উচিত? অবশ্যই না। আমার পরিবর্তন করা কি খারাপ? এসএসএইচ সার্ভারটি 2222 পোর্ট করার সময় পাসওয়ার্ড ব্যবহার করার সময়? না, যদি এটি সর্বোত্তম সমাধান হয় তবে কিছু পরিবর্তন করা ("অবসকিউরিং") বন্দরটি সহজেই সাধারণ বন্দরগুলি অনুসন্ধান করে স্বয়ংক্রিয় শোষণকারী স্ক্যানারগুলির একটি স্তূপটি কেটে ফেলবে through আমরা একটি সুরক্ষা সুবিধা অর্জন করব through অস্পষ্টতা যা ভাল, তবে আমরা অস্পষ্টতার উপর নির্ভর করি না they তারা যদি এটি খুঁজে পায় তবে তাদের পাসওয়ার্ডটি ক্র্যাক করা দরকার ""
গায়া

তার জন্য ধন্যবাদ. আমি অনেক শিখেছি. আমি যা খুঁজছিলাম তা নয়, তবে এখনও ... খুব সহায়ক। সেরা --- জেসি
জেচওদেবদেব

0

$pageidআপনি যে পৃষ্ঠায় ব্যবহারকারীদের পুনঃনির্দেশিত হতে চান তা প্রতিস্থাপন করুন

/* Redirect log in page */
function redirect_login_page(){
  // Store for checking if this page equals wp-login.php
   $page_viewed = basename( $_SERVER['REQUEST_URI'] );

  // permalink to the custom login page
  $login_page  = get_permalink($pageid);

  if( $page_viewed == "wp-login.php" ) {
    wp_redirect( $login_page );
    exit();
  }
}

add_action( 'init','redirect_login_page' );

0
<?php
/* Template Name: Register Template */
if(is_user_logged_in()) { $user_id = get_current_user_id();$current_user = wp_get_current_user();$profile_url = get_author_posts_url($user_id);$edit_profile_url = get_edit_profile_url($user_id); ?>
<div class="regted">
    You're login with nickname <a href="<?php echo $profile_url ?>"><?php echo $current_user->display_name; ?></a> Are you want to <a href="<?php echo esc_url(wp_logout_url($current_url)); ?>">Exit</a> ?
</div>
<?php } else { ?>
<div class="register">
    <?php $err = ''; $success = ''; global $wpdb, $PasswordHash, $current_user, $user_ID; if(isset($_POST['task']) && $_POST['task'] == 'register' ) { $pwd1 = $wpdb->escape(trim($_POST['pwd1']));
        $pwd2 = $wpdb->escape(trim($_POST['pwd2']));
        $email = $wpdb->escape(trim($_POST['email']));
        $username = $wpdb->escape(trim($_POST['username']));

        if( $email == "" || $pwd1 == "" || $pwd2 == "" || $username == "") {
            $err = 'Please enter password in this field';
        } else if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $err = 'Email is invalid';
        } else if(email_exists($email) ) {
            $err = 'Email is existed';
        } else if($pwd1 <> $pwd2 ){
            $err = 'Password does not match the confirm password';
        } else {
            $user_id = wp_insert_user( array ('user_pass' => apply_filters('pre_user_user_pass', $pwd1), 'user_login' => apply_filters('pre_user_user_login', $username), 'user_email' => apply_filters('pre_user_user_email', $email), 'role' => 'subscriber' ) );
            if( is_wp_error($user_id) ) {
                $err = 'Error on user creation.';
            } else {
                do_action('user_register', $user_id);
                $success = 'Registered Successfully';
            }
        }
    }
    ?>
  <link  rel="stylesheet" type="text/css"  href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<!--display error/success message-->
<div id="message">
        <?php
            if(! empty($err) ) :
                echo ''.$err.'';
            endif;
        ?>
        <?php
            if(! empty($success) ) :
                $login_page  = home_url( '/login' );
                echo ''.$success. '<a href='.$login_page.'> Login</a>'.'';
            endif;
        ?>
    </div>

           <div class="container">    
        <div id="loginbox" style="margin-top:100px;" class="mainbox col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2">
          <div style="padding-bottom: 50px;" class="col-md-6 col-md-offset-4 col-sm-8 col-sm-offset-2"/><img src="#url.logo"></div>
    <form class="form-horizontal" method="post" role="form">
<div class="form-group">
    <label class="control-label  col-sm-3" for="username">Username:</label>
    <div class="col-sm-9">
    <input type="text" class="form-control" name="username" id="username" placeholder="Username">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="email">Email:</label>
    <div class="col-sm-9">
        <input type="email" class="form-control" name="email" id="email" placeholder="Email">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="pwd1">Password</label>
    <div class="col-sm-9">
        <input type="password" class="form-control" name="pwd1" id="pwd1" placeholder="Enter your password">
    </div>
</div>
<div class="form-group">
    <label class="control-label col-sm-3" for="pwd2">Retype password:</label>
    <div class="col-sm-9">
        <input type="password" class="form-control" name="pwd2" id="pwd2" placeholder="Retype password">
    </div>
</div>
<?php wp_nonce_field( 'post_nonce', 'post_nonce_field' ); ?>
<div class="form-group">
    <div class="col-sm-offset-3 col-sm-9"  style="text-align:center;">
    <button type="submit" class="btn btn-primary">Register</button>
    <input type="hidden" name="task" value="register" /><br/>
    </div>
</div>
</form>
</div>
</div>
</div>
<?php 
get_footer();
 ?>
<div class="message">
    <?php
        $login  = (isset($_GET['login']) ) ? $_GET['login'] : 0;
        if ( $login === "failed" ) {
                echo '<strong>Error</strong> Wrong username or password!';
        } elseif ( $login === "empty" ) {
                echo '<strong>Error:</strong>Username or password is blank field.';
        } elseif ( $login === "false" ) {
                echo '<strong>ERROR:</strong> Exit';
        }
    ?>
</div>
<?php } ?>

আমার কাস্টম লগইন পৃষ্ঠা উদাহরণ। সংরক্ষণ করে লগইন.এফপি এবং পুট কোড

add_action('init','wpse_login');

function wpse_login(){
 global $pagenow;
 if( 'wp-login.php' == $pagenow && !is_user_logged_in()) {
  wp_redirect('http://yoursite.com/login.php');
  exit();
 }
}

ভিতরে functions.php


আপনি দয়া করে আপনার প্রশ্নটি সম্পাদনা করতে পারেন এবং উত্তরটি কেন আগের উত্তরগুলির চেয়ে ভাল বা আপনি যা করছেন ঠিক কী করছেন তা ব্যাখ্যা করতে পারেন। কোডের উত্তরগুলি সাধারণত কোনও ধরণের ব্যাখ্যা ছাড়াই ভ্রান্ত হয়।
হাওডি_এমসিজি

এই কোডটি বুটস্ট্র্যাপের উপর ভিত্তি করে আমার কাস্টম কোডের সাথে login.php লগইন করতে wp-login.php স্যুইচ করে এটি অটো বট প্রতিরোধ করতে পারে বা ডিফল্ট url অনুমান করতে পারে। আপনি যা চান তার বাক্যে <i> লগইন </ i> ব্যবহার করতে পারেন and এবং সরাসরি লগইন url আপনাকে উদ্ধৃত করে না কেউ জানে।
রেই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.