programing

node.js의 Wordpress 인증

javajsp 2023. 6. 23. 21:46

node.js의 Wordpress 인증

사용자가 워드프레스 페이지의 사용자 계정을 사용하여 node.js 앱을 사용할 수 있도록 하는 가장 좋은 방법은 무엇입니까?

저는 Redis에 세션 정보를 저장하려고 했지만, PHP에 익숙하지 않아서 세션이 저장되지 않는 막다른 골목에 부딪혔습니다.는 이 가이드를 사용해 왔습니다.

노드 phpass도 사용해봤지만 문서화가 잘 되지 않습니다.Wordpress 데이터베이스에 연결했지만 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));
         }
    }
});

세션 공유 외에 더 나은 방법이 있습니까?오오스?

당신이 주로 당신의 node.js 애플리케이션에서 사용자 인증을 한 다음 워드프레스용 쿠키를 만들고 싶은지 아니면 그 반대인지 잘 이해하지 못했지만, 워드프레스가 어떻게 하는지 이해하면 두 가지를 모두 달성할 수 있을 것입니다.

무엇보다도 WordPress는 쿠키를 보호하기 위해 많은 해시와 소금을 사용하므로, 노드js 응용 프로그램에서 동일한 값을 정의할 수 있는 해시와 소금이 어디에 있는지 알아야 합니다.

wp-config.php 수 있을 입니다, 저는 이 단지 당신의 합니다.LOGGED_IN_KEY,LOGGED_IN_SALT,NONCE_KEY그리고.NONCE_SALT은 파일을 더 잘볼 수 것입니다.wp-includes/default-constants.php값을 합니다. 가 이 WordPress " "에 있을 것입니다. if (...) if (아마도 "WordPress " " (...) "에 있습니다. if (...) " if (... ) " if (아마도 (...) "If (... ) "If (If ") ") "If (If ( (If (If (If (If ") ") ") " (If (If ") ") ") ")wp-config.php의 값은 )의 에서 나올 것입니다.wp-includes/default-constants.phpjava.

이제 워드프레스가 쿠키를 만드는 방법을 이해해야 합니다.다음은 로그인한 쿠키의 예입니다.

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은 같은 에 이가있파동일서에한일는당지신고▁the서▁you▁on파에▁have일▁the▁file▁same를 가지고 있습니다.COOKIEHASHconstant,을 확인하려면 . nodejs, nodejs nodejs와 같은 이름도 읽을 수 .COOKIEHASHmd5로 해시된 웹 사이트 URL입니다.

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 더LOGGED_IN_COOKIE워드프레스에 사용할 로그인한 쿠키 이름으로 상수를 지정하고 다음과 같이 nodejs에 이 상수를 지정합니다.

//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_hmacto your nodejs application if you want to create the cookie there, the first two functions reside on the filewp-fues/pluggues/pluggable.phpthehash_hmacresides onwp-proxy/compat.proxy'입니다.

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 응용 프로그램에서 WordPress 사용자를 인증할 수 있습니다.

로그인한 쿠키 값에 대해 WordPress가 수행하는 작업은 데이터베이스의 사용자에 대한 해시된 암호를 슬라이스하고, 사용자 로그인 이름 및 쿠키의 만료 시간(unix 시간)과 병합하여 모두 해시하는 것입니다.그런 다음 사용자 로그인 이름, 쿠키 만료 시간 및 방금 만든 해시 값을 사용하여 쿠키 값을 만듭니다. 처음 두 값은 사용자의 해시된 암호로 "토큰 해시"를 확인할 수 있습니다.

WordPress에서 사용자를 로그아웃하려면 logout url에서 사용자의 nonce 키를 전달해야 하므로, 사용자의 nodejs 응용 프로그램에서 WordPress에서 사용자를 로그아웃하려면 nonce 키 기능을 전송해야 합니다.

응용 프로그램이 하위 도메인에 있을 경우 다음을 선언할 수 있습니다.wp-config.php또는 WordPress는 쿠키의 전체 도메인만 사용하고 하위 도메인에는 쿠키를 사용할 수 없습니다.

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

이것이 당신에게 더 나은 길을 알려주기를 바랍니다.행운을 빌어요.

다음 npm 패키지를 보십시오. https://www.npmjs.com/package/wp-auth 쿠키를 기반으로 nodejs에서 사용자를 인증할 수 있는 쿠키 기반 인증 패키지입니다.워드프레스 쿠키를 사용하여 노드 앱에서 인증 사용자를 위해 직접 사용하고 있습니다.

이것이 도움이 되길 바랍니다.

이미 제공된 답변을 확장하기 위해 쿠키를 통해 워드프레스로 사용자를 인증하는 몇 개의 node.js 라이브러리가 있습니다. 워드프레스가 기본적으로 하는 것과 정확히 같습니다.

  1. https://github.com/j3k0/node-wordpress-auth (https://github.com/Nightgunner5/node-wordpress-auth) 대신)

  2. https://github.com/jhurliman/node-phpass (WP가 암호를 해시하는사용하는 것과 동일한 라이브러리인 https://github.com/rchouinard/phpass 의 포트에서 node.js로)

npm 설치 방법을 사용하여 설치한 press-auth 버전이 오래되었습니다.모듈 웹 사이트에서 버전을 다운로드하여 사용합니다.

언급URL : https://stackoverflow.com/questions/17984765/wordpress-authentication-in-node-js