2013-08-01 9 views
5

किसी उपयोगकर्ता को Wordpress पृष्ठ से अपने उपयोगकर्ता खाते का उपयोग करके node.js ऐप का उपयोग करने की अनुमति देने का सबसे अच्छा तरीका क्या है?node.js में वर्डप्रेस प्रमाणीकरण

मैंने रेडिस में सत्र जानकारी संग्रहीत करने का प्रयास किया है, लेकिन मैं PHP से बहुत परिचित नहीं हूं और एक मृत अंत में भाग गया हूं जहां सत्र संग्रहित नहीं किया जा रहा है। मैंने इस guide का उपयोग किया है।

मैंने node-phpass का उपयोग करने का भी प्रयास किया है, लेकिन यह बहुत अच्छी तरह से प्रलेखित नहीं है। मैंने वर्डप्रेस डेटाबेस से सफलतापूर्वक कनेक्ट किया है, लेकिन पासवर्ड हैश जो मैं नोड-फीपास के साथ उत्पन्न करता हूं, wp_users तालिका में हैश से मेल नहीं खाता है।

यह है कि मैं क्या नोड PHPass परीक्षण करने के लिए उपयोग कर रहा हूँ है: सत्र को साझा करने से

var mysql  = require('mysql'); 
var connection = mysql.createConnection({ 
    host  : 'localhost', 
    user  : 'wordpress', 
    password : 'jPWrwvGbYXMADd8F', 
    database : 'wordpress', 
}); 

connection.query('SELECT * FROM wp_users', function(err, rows) { 
    if (err) { 
     console.log("Database error: " + err); 
    } else { 
     for (var i = 0; i < rows.length; i++){ 
      console.log("Rows[" + i + "] : " + rows[i].user_login + " " + passwordHash.checkPassword('secret',rows[i].user_pass)); 
     } 
    } 
}); 

अलावा, वहां किसी अन्य बेहतर तरीके यह करने के लिए कर रहे हैं? OAuth?

+0

यदि आपके पास सीएमएस जैसे वर्डप्रेस और जूमला के बीच विकल्प है, तो एक [नोडजेस-जूमला] (https://github.com/jlleblanc/nodejs-joomla) मॉड्यूल है जो जूमला के बीच साझा सत्र बनाता है और नोड काफी आसान है। – alreadytaken

उत्तर

2

मुझे समझ में नहीं आया कि क्या आप मुख्य रूप से अपने node.js एप्लिकेशन पर प्रमाणित करना चाहते हैं और फिर वर्डप्रेस या विपरीत के लिए कुकी बनाता है, लेकिन एक बार जब आप समझते हैं कि वर्डप्रेस यह कैसे कर रहा है, तो आप होंगे दोनों को पूरा करने में सक्षम।

सबसे पहले, वर्डप्रेस अपनी कुकीज़ की सुरक्षा के लिए बहुत सारे हैंश और लवण का उपयोग करता है, इसलिए आपको यह पता होना चाहिए कि इन हैंश और लवण आपके लिए नोडजेस एप्लिकेशन के लिए समान मूल्यों को परिभाषित करने में सक्षम हैं।

wp-config.php पर आप हैश और लवण हम खोज रहे हैं स्थिरांक मिलेगा, मैं तुम्हें सिर्फ अपने NodeJS आवेदन करने के लिए LOGGED_IN_KEY, LOGGED_IN_SALT, NONCE_KEY और NONCE_SALT के लिए निरंतर मूल्यों के परिवहन के लिए की जरूरत है। आप फ़ाइल wp-includes/default-constants.php पर एक बेहतर रूप दे सकते हैं जहां वर्डप्रेस अपना डिफ़ॉल्ट निरंतर मान रखता है, अगर (परिभाषित (..)) पर ध्यान दें क्योंकि अगर इस फ़ाइल से पहले कहीं और परिभाषित किया गया है (शायद wp-config.php पर) मान wp-includes/default-constants.php फ़ाइल से नहीं होगा।

अब, आपको यह समझने की आवश्यकता है कि वर्डप्रेस अपनी कुकीज़ कैसे बना रहा है। यह कुकी में लॉग इन का एक उदाहरण है:

Cookie Name: wordpress_logged_in_2801795354f6f1c2d2ab3b48033a8257 
Cookie Value: admin|1392386298|647852d61caf4cfdea975d54ecb09ca8 
Cookie Value: %user_login%|%cookie_expire_time%|%hashed_sliced_user_hashed_password% 

आप अपने NodeJS आवेदन इस कुकी को समझते हैं, यह सिर्फ वर्डप्रेस की तरह तोड़ने के लिए सक्षम किया जा रहा बनाने की जरूरत है।

कार्यों पर वर्डप्रेस पर wp-includes/pluggable.php

$logged_in_cookie = wp_generate_auth_cookie($user_id, $expiration, 'logged_in'); 
//... 
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true); 

नोट निरंतर LOGGED_IN_COOKIE डिफ़ॉल्ट wp-includes/default-constants.php पर सेट कर दिया जाता है कि, एक ही फाइल आप COOKIEHASH निरंतर है पर रहता है प्रमाणीकरण कुकी बनाने के लिए, आप के मान के परिवहन के लिए की जरूरत है कि आपके नोडजेस एप्लिकेशन को कुकी नाम को पढ़ने और मान्य करने में सक्षम होने के लिए, COOKIEHASH केवल वेबसाइट URL md5 के साथ है।

if (!defined('COOKIEHASH')) { 
    $siteurl = get_site_option('siteurl'); 
    if ($siteurl) 
     define('COOKIEHASH', md5($siteurl)); 
    else 
     define('COOKIEHASH', ''); 
} 
//... 
define('LOGGED_IN_COOKIE', 'wordpress_logged_in_' . COOKIEHASH); 

यदि आप उन सभी को परिवहन नहीं करना चाहते हैं, तो आप बस wp-config पर सेट कर सकते हैं।php अपने NodeJS को सिर्फ इस निरंतर कुकी नाम है कि आप WordPress के लिए चाहते हैं और चित्र में लॉग इन किया है, इस तरह के साथ LOGGED_IN_COOKIE निरंतर:

//WordPress wp-config.php 
define('LOGGED_IN_COOKIE', 'logged_in_'.'%privateHashKey%'); 
//NODEJS 
var LOGGED_IN_COOKIE = 'logged_in_'+'%privateHashKey%'; 

और अंत में आप चित्र को कार्यों wp_generate_auth_cookie, wp_hash और hash_hmac की आवश्यकता होगी to your nodejs application if you want to create the cookie there, the first two functions reside on the file wp-inclues/pluggable.php the हैश_मैक resides on wp-include/compat.php`।

if (!function_exists('wp_generate_auth_cookie')) : 
//... 
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); 
} 
endif; 

एक बार जब आप समझते हैं wp_generate_auth_cookie समारोह क्या कर रहा है, तो आप भी कुकी को डिकोड करने और अपने NodeJS आवेदन पर वर्डप्रेस उपयोगकर्ता को प्रमाणित करने में सक्षम हो जाएगा।

ध्यान दें कि लॉग इन कुकी मूल्य के लिए वर्डप्रेस क्या कर रहा है, बस उपयोगकर्ता के लिए अपने पासवर्ड पर उपयोगकर्ता के लिए हैश किए गए पासवर्ड को टुकड़ा कर रहा है, उपयोगकर्ता लॉगिन नाम और समाप्ति समय (यूनिक्स टाइम) के साथ विलय कर रहा है, और सभी एक साथ हैशिंग। फिर वह उपयोगकर्ता लॉगिन नाम के साथ कुकी मूल्य बनाता है, कुकी के लिए समाप्ति समय और हैश जिसे उसने अभी बनाया है, पहले दो मानों के साथ वह उपयोगकर्ता से हैंश किए गए पासवर्ड के साथ "टोकन हैश" को सत्यापित कर सकता है।

आप शायद यह जानना चाहें कि वर्डप्रेस पर किसी उपयोगकर्ता को लॉगआउट करने के लिए आपको लॉगआउट यूआरएल पर उपयोगकर्ता के लिए गैर-कुंजी कुंजी पारित करने की आवश्यकता है, इसलिए यदि आप अपने नोडजेस एप्लिकेशन द्वारा वर्डप्रेस से किसी उपयोगकर्ता को लॉगआउट करना चाहते हैं, तो हो सकता है कि आप गैर महत्वपूर्ण कार्यों को परिवहन।

यदि आपका आवेदन उप डोमेन में होगा, तो आप wp-config.php पर घोषित करना चाहेंगे, या वर्डप्रेस केवल कुकी पर पूर्ण डोमेन का उपयोग करेगा, और कुकी सबडोमेन के लिए उपलब्ध नहीं होगी।

define('COOKIE_DOMAIN', '.domain.com'); 

आशा है कि यह आपको बेहतर दिशा दे। सौभाग्य।

0

पहले से ही दिए गए जवाब का विस्तार करने के कुकीज़ के माध्यम से वर्डप्रेस के साथ एक उपयोगकर्ता को प्रमाणित करने Node.js पुस्तकालयों के एक जोड़े वास्तव में की तरह वर्डप्रेस डिफ़ॉल्ट रूप से करता है, देखते हैं

  1. https://github.com/j3k0/node-wordpress-auth (https://github.com/Nightgunner5/node-wordpress-auth का कांटा)

  2. https://github.com/jhurliman/node-phpass (https://github.com/rchouinard/phpasswhich is same library WP is using to hash passwords के एक बंदरगाह, Node.js को)

0

एनपीएम इंस्टॉल विधि का उपयोग कर स्थापित WordPress-auth संस्करण पुराना है। मॉड्यूल वेबसाइट से संस्करण डाउनलोड और उपयोग करें।

संबंधित मुद्दे