ইউসাইড ওয়ার্ডপ্রেস / পিএইচপি থেকে কোনও ব্যবহারকারীর বৈধতা কীভাবে?


9

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

সুতরাং অন্য কথায়, আমার যদি কোনও অনুরোধটি ব্যবহারকারীর ওয়ার্ডপ্রেসে (সংস্করণ 3.3.x) লগ ইন করা হয় তবে কেবল একটি সার্লেটকে একটি অনুরোধ সম্পাদন করা উচিত। সার্ভলেট (টমক্যাট) এবং ওয়ার্ডপ্রেস (অ্যাপাচি 2) উভয় একই শারীরিক মেশিনে চলে এবং একই ডাটাবেস ভাগ করে।

তাত্ত্বিকভাবে এটি নিম্নলিখিত দ্বারা সহজেই সমাধান করা যেতে পারে:

  1. ওয়ার্ডপ্রেস লগনের সময়, কিছু ব্যবহারকারীর টোকন একটি জাভাস্ক্রিপ্ট ভেরিয়েবলে সংরক্ষণ করা হয়।
  2. এজ্যাক্স অ্যাপ্লিকেশন প্রতিটি কলটিতে সার্ভলেটে ব্যবহারকারীকে টোকেন ফরোয়ার্ড করে।
  3. সার্ভলেটগুলি ওয়ার্ডপ্রেসের ক্যোয়ারী টোকেনটি বৈধ হলে (যেমন ব্যবহারকারী লগ ইন করা থাকে) ব্যবহার করেন এবং অনুরোধটি সম্পাদন বা অস্বীকার করেন।

প্রশ্নটি কীভাবে এটি ওয়ার্ডপ্রেস দিকে প্রয়োগ করা যেতে পারে?
কারণ, তত্ত্বটি কী জটিল করে তোলে তা হ'ল আমি এখনও কোনও পিএইচপি প্রোগ্রামিং করিনি।

প্রথমে আমি সার্ভারলে ওয়ার্ডপ্রেস_লগড_ইন (auth) কুকি স্থানান্তর করার কথা ভাবছিলাম এবং যদি লেখক কুকিটি বৈধ হয় তবে সার্লেলেট ক্যোয়ারী ওয়ার্ডপ্রেসটি দিন। তবে যেমনটি মনে হয়, এটি করা যায় না, কারণ ডাব্লুপি_ডিয়ালিটি_আউথ_কুকি () সর্বদা ব্যর্থ হয়, এমনকি যদি কোনও ব্যবহারকারীর লগ-ইন করা কুকি-ডেটা পাস হয়ে যায়। অন্য একটি সমাধান হ'ল একটি প্লাগইন বিকাশ করা যেতে পারে যা সারণী এবং ব্যবহারকারীকে একটি টেবিলের মধ্যে রাখে, যা সার্লেটগুলি সহজেই অনুসন্ধান করতে পারে। অথবা অন্য কোন সমাধান হতে পারে ...


এজেএক্স পরিষেবা হিসাবে ব্যবহারকারীর প্রমাণীকরণের প্রস্তাব দেয় এমন প্লাগইন লিখুন বা ব্যবহার করবেন না কেন ? এটি পুরো ডাব্লুপি স্ট্যাকটি ব্যবহার করতে পারে এবং কোনও অ্যাপ্লিকেশন উপযুক্ত HTTP অনুরোধ জারি করে এটি ব্যবহার করতে পারে। আপনার ব্যবহারকারীর শংসাপত্রগুলি যথাযথভাবে সুরক্ষিত করার জন্য যত্ন নিন।
রাফেল

আমি মনে করি আমি আমাকে ভুল প্রকাশ করেছি, আমার এজ্যাক্স প্রমাণীকরণের সিরিস লাগবে না। আমার যা দরকার তা হ'ল কোনও সার্লেলেটটিকে ইতিমধ্যে প্রমাণীকৃত ব্যবহারকারীকে বৈধতা দেওয়ার অনুমতি দেওয়ার একটি উপায়। অর্থাৎ ব্যবহারকারী এখনও লগইন হয়েছে কিনা তা যাচাই করুন। কথাটি হ'ল: ব্যবহারকারী লগ ইন করে, একটি এজ্যাক্স অ্যাপ্লিকেশনটি অ্যাক্সেস করে, যা ডেটা সঞ্চয় / পুনরুদ্ধারে সার্লেলে যোগাযোগ করে। এখন সার্ভলেটটির 1 টি পরীক্ষার কিছু উপায় প্রয়োজন যদি অনুরোধটি লগ-ইন করা ব্যবহারকারী থেকে আসে এবং 2) ব্যবহারকারী আইডি পুনরুদ্ধার করে (আরও ডেটাবেস অ্যাক্সেসের জন্য)।
দাভোস সিওয়ার্থ

এই সমস্ত মন্তব্য যুক্ত করতে আপনার প্রশ্নটি সম্পাদনা করা উচিত। সাধারণত আপনার সমস্যা (!) এবং আপনার ধারণাটি কী তা উপস্থাপন করুন। বিশেষত, আপনি যে প্রক্রিয়াটি কল্পনা করছেন তার ধাপে ধাপে ধাপে ধাপ দিন।
রাফেল

আমি আশা করি প্রশ্নটি এখন আরও পরিষ্কার হয়ে গেছে।
দাভোস সিওয়ার্থ

আপনি এটি কিভাবে শেষ? আপনি কি আপনার সমাধান ভাগ করতে পারেন? আপনি XMLRPC ব্যবহার করেছেন?
pkyeck

উত্তর:


7

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

এটি বলেছিল, আপনার নিজের রোল করা খুব সহজ। শুধু xmlrpc_methodsএকটি ফিল্টার মধ্যে hook , এবং আপনার যুক্ত করুন। আপনি যে অ্যারে কীটি যুক্ত করেছেন সেটি হ'ল আপনার অ্যাপ্লিকেশন থেকে কল করা xMLrpc পদ্ধতি এবং মানটি হ'ল ফাংশনটি যা ওয়ার্ডপ্রেস এক্সএমএলআরপিসি সার্ভারের মাধ্যমে ডাকে।

<?php
add_filter('xmlrpc_methods', 'wpse39662_add_login_method' );
/**
 * Filters the XMLRPC methods to allow just checking the login/pass of
 * a given users
 */
function wpse39662_add_login_method( $methods )
{
    $methods['wpse39662.login'] = 'wpse39662_check_login';
    return $methods;
}

এবং কলব্যাক ফাংশন, wpse39662_check_loginএটিতে একটি যুক্তি পাঠিয়ে দেবে, XMLRPC সার্ভারে প্রেরিত জিনিসগুলির অ্যারে।

<?php
function wpse39662_check_login( $args )
{
    $username = $args[0];
    $password = $args[1];

    $user = wp_authenticate( $username, $password );

    if( is_wp_error( $user ) )
    {
        return false;
    }
    return true;
}

এখানে প্লাগইন হিসাবে সমস্ত কিছু । আপনার ডাব্লুপি সাইটে সেই ইনস্টলড এবং এক্সএমএলআরপিসি সক্ষম হওয়ার সাথে সাথে আপনার কিছু এক্সএমএলআরপিসি ক্লায়েন্টের সাথে অনুরোধ করতে সক্ষম হবেন (আমি নিশ্চিত জাভার একটি আছে)।

উপরের (পাইথন এক্সএমএলআরপিসি ক্লায়েন্ট) পরীক্ষা করার জন্য আমি যে কোডটি ব্যবহার করেছি তা এখানে।

>>> import xmlrpclib as xmlrpc
>>> s = xmlrpc.ServerProxy('http://wordpress.dev/xmlrpc.php')
>>> s.wpse39662.login('admin', 'password')
True

1
ধন্যবাদ! এটি আমার জন্য আরও বিশাল পদক্ষেপ নিয়ে আসে! ব্যবহারকারীদের কুকি ব্যবহার করে কি একই অর্জন করা যায়? সুতরাং আমি স্টোর এবং তারের উপর ব্যবহারকারীর নাম / পিডাব্লুডি পাঠাতে হবে না? আমার প্রকল্পটিতে একটি অ্যাজাক্স অ্যাপ্লিকেশন রয়েছে যা ওয়ার্ডপ্রেস পৃষ্ঠায় এমবেড হয়েছে। এজ্যাক্স অ্যাপ্লিকেশনটি একটি সার্লেটকে কল করে এবং সার্লেটটি যদি ওয়ার্ডপ্রেসটি জিজ্ঞাসা করে যে যদি ব্যবহারকারী প্রমাণীকৃত হয়। আমি ব্যবহারকারী / পিডাব্লুডিকে এজাক্স অ্যাপ্লিকেশনটিতে পাসওয়ার্ড দিয়ে সার্ভলেটে স্থানান্তর করতে পারতাম তবে আমি ভয় করি যে এটি খুব বেশি সুরক্ষিত হবে না। সুতরাং আমি প্রবন্ধের কুকির সামগ্রীটি wp_ માન્યate_auth_cookie () এ যাওয়ার চেষ্টা করেছি তবে এটি সর্বদা ব্যর্থ হয়।
দাভোস সিওয়ার্থ

আমি কেবল ব্যবহারকারীর জন্য একটি টোকেন বা কিছু উত্পন্ন করব এবং এটি সিস্টেমের উভয় প্রান্তে সঞ্চয় করব। তারপরে টোকেনটি পিছনে পিছনে পাস করুন।
chrisguitarguy

2

ওয়ার্ডপ্রেস (বর্তমানে) লগইন করার পরে ব্যবহারকারী যে কোনও কুকি দেয় তা পরীক্ষা করে ব্যবহারকারী এখনও লগ ইন করে কিনা তা পরীক্ষা করে। এটি কিছুটা হ্যাশিং করে এই কুকির সামগ্রীগুলি তৈরি করে। বিশদটি "wp_generate_auth_cookie" ফাংশনে / Wp-includes/pluggable.php এ রয়েছে:

function wp_generate_auth_cookie($user_id, $expiration, $scheme = 'auth') {
    $user = get_userdata($user_id);

    $pass_frag = substr($user->user_pass, 8, 4);

    $key = wp_hash($user->user_login . $pass_frag . '|' . $expiration, $scheme);
    $hash = hash_hmac('md5', $user->user_login . '|' . $expiration, $key);

    $cookie = $user->user_login . '|' . $expiration . '|' . $hash;

    return apply_filters('auth_cookie', $cookie, $user_id, $expiration, $scheme);
}

আপনি একই জাভা কোডে এই চেক তৈরির জন্য এই অ্যালগরিদমটিকে (এটি এবং অন্যান্য auth_cookie ফাংশনগুলি ব্যবহার করে) পুনরায় তৈরি করতে পারেন। কুকি আপনার সার্লেলে প্রেরিত হয়েছে তা নিশ্চিত করার জন্য জেএস ব্যবহার করা যেতে পারে।

অন্যথায় এক্সএমএলআরপিসি একটি ভাল ধারণা হতে পারে। লেখক কুকি যাচাই করার জন্য আপনি একটি নতুন পদ্ধতি (এখানে অন্য সমাধানে ব্যাখ্যা হিসাবে) লিখতে পারেন (ব্যবহারকারীর নাম এবং পাসওয়ার্ড যাচাই করার পরিবর্তে সাধারণত সম্পন্ন হয়)।


2

এক্সেক-পিএইচপি প্লাগইন পান , এবং তারপরে একটি API এর রেফারেন্সে একটি ভাল পারমালিঙ্ক ( http://mysite/user_id/) এবং কোড সহ একটি ওয়ার্ডপ্রেস পৃষ্ঠা (কোনও পোস্ট নয়) করুন :get_current_user_id()

<?php
$user_id = get_current_user_id();
if ($user_id == 0) {
    echo 'You are currently not logged in.';
} else {
    echo 'You are logged in as user '.$user_id.'.';
}
?>

তারপরে আপনি ক্লায়েন্ট আপনাকে যে কুকিগুলি প্রেরণ করেন সেগুলি বের করে আনতে পারেন এবং GETঅনুরোধ করে রাখতে পারেন http://127.0.0.1/user_id/। তারপরে আপনি জানতে পারবেন যে ব্যবহারকারী লগ ইন হয়েছে কিনা এবং তাদের ব্যবহারকারীর আইডি কী।


1

আপনি নন-ডাব্লুপিপি পৃষ্ঠায় এরকম কিছু করতে পারেন:

<?php
require('./wp-blog-header.php');
// Make sure ^ points to the root of your WP installation

if ( is_user_logged_in() ) {
   // Perform your request here
}

?>

উত্তরের জন্য ধন্যবাদ, সমস্যাটি হ'ল সার্ভলেটগুলি জাভাতে লেখা হয়, তাই পিএইচপি কোড কার্যকর করা যায় না। আমি যা খুঁজছি তা হ'ল এক ধরণের বাহ্যিক ইন্টারফেস যা কোনও সার্লেট / জাভাকে ওয়ার্ডপ্রেস / পিএইচপি সঙ্গে যোগাযোগের অনুমতি দেয়। অবশ্যই কিছু ধরনের ইন্টারফেস উপলব্ধ আছে, আমি এটি সন্ধান করতে কেবল অক্ষম ...
দাভোস সিওয়ার্থ

আহ আমি দেখি. সম্ভবত কোয়ার্কাস কৌচোকো / রিসিন ৩.০ / কোয়্যারাসের মতো কিছু ব্যবহার করা আপনাকে উভয় পৃথিবীর সেরা পেতে পারে?
ফ্ল্যাশিংসার্জার

আপনাকে ধন্যবাদ, তবে কোয়ার্কাসটি ভুল সমাধান, কারণ আমার কাছে ইতিমধ্যে একটি ওয়ার্কপ্রেস / পিএইচপি / অ্যাপাচি এবং একটি ওয়ার্কিং সার্লেট / জাভা / টমক্যাট ইনস্টলেশন রয়েছে। এখন কেবলমাত্র আমার প্রয়োজন সেই দুটিটির মধ্যে একটি ইন্টারফেস, যা কোনও ব্যবহারকারী ওয়ার্ডপ্রেসে লগইন হয়েছে (কিছু ইন্টারফেস / প্রোটোকল / আইপিসি / যাই হোক না কেন) সার্লেটটি যাচাই করতে দেয়।
দাভোস সিওয়ার্থ

1

এটি একটি ফাইলের ওয়ার্ডপ্রেস প্লাগইন যা কাজটি করে:

function yournamespace_validateAuthCookie($cookie, $scheme = 'logged_in') {
    return wp_validate_auth_cookie($cookie, $scheme);
}

function yournamespace_new_xmlrpc_methods($methods) {
    $methods['yournamespace.validateAuthCookie'] = 'yournamespace_validateAuthCookie';
    return $methods;
}
add_filter('xmlrpc_methods', 'yournamespace_new_xmlrpc_methods');

এটি মূলত একটি নতুন এক্সএমএল-আরপিসি পদ্ধতি উদ্ঘাটিত করে যা দিয়ে আপনি ওয়ার্কপ্রেসকে wordpress_logged_in_...কুকি যাচাই করতে চাইতে পারেন ।

তারপরে আপনাকে এই পদ্ধতিটি জিজ্ঞাসা করার জন্য কিছু কোড লিখতে হবে এবং এটিকে wordpress_logged_in_...কুকির মানটি দিতে হবে ।

এই পদ্ধতিটি হয় false(যদি কুকি বৈধতা দেয় না) অথবা বৈধতা সফল হয় তবে ব্যবহারকারী আইডি ফিরে আসবে ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.