检查用户是否通过JS登录?

时间:2016-03-15 作者:N00b

我正在尝试随机主题和“新技术”,并试图将整个前端转换为纯JS单页应用程序(无页面刷新-如Facebook、Twitter等)WP REST API, Redux.jsReact.js 其他帮手很少。

How to handle logged-in users? 我该如何跟踪这一点?我知道这些信息通常是通过cookie处理的。如何通过JS检查它?

我可以在每次路由/url更改和使用时调用ajaxis_user_logged_in() 在服务器端,但它似乎是灵长类的。我可以通过JS直接访问cookie并在浏览器中进行检查吗?

如果这不是我的主题,我想了很久,但这似乎是一个非常特定于WP的问题,我只是在尝试并试图将其推向一个新的水平,请不要说“这是个坏主意”评论

3 个回复
最合适的回答,由SO网友:Aamer Shahzad 整理而成

当您要从主题(前端)发送ajax请求时,需要指定ajaxurl,否则它将抛出错误“undefined ajaurl”

/**
 * frontend ajax requests.
 */
wp_enqueue_script( \'frontend-ajax\', JS_DIR_URI . \'frontend-ajax.js\', array(\'jquery\'), null, true );
wp_localize_script( \'frontend-ajax\', \'frontend_ajax_object\',
    array( 
        \'ajaxurl\' => admin_url( \'admin-ajax.php\' )
    )
);
然后在前端ajax中。js您可以像这样发送ajax请求

$.ajax({
    url: frontend_ajax_object.ajaxurl,
    type: \'GET\',
    data: {
        action: \'register_action_hook\',
    },
    success: function( response ) {
        console.log( response );
    },
});
然后在你的函数中。php您可以将函数挂接到register\\u action\\u挂钩。

add_action( \'wp_ajax_register_action_hook\', \'prefix_do_something\' );
function prefix_do_something() {
    if ( is_user_logged_in ) {
        // do something
    } else {
        // do something else
    }
}
您还可以使用@Howdy\\u McGee方法来本地化is\\u logged\\u in变量,使用

wp_localize_script( \'handler\', \'js_object\', $array_of_variables );
并使用js\\u对象在js中访问它。variable\\u name参考@Howdy\\u McGee答案。

SO网友:Bruno Cantuaria

您需要检查Cookie,而不是(可能是DB),或者以某种方式调用一个函数(可能是ajax或类似的东西),以检查用户是否登录以及它是什么用户。尝试查看wp includes/pluggable中的函数wp\\u validate\\u auth\\u cookie()。php

SO网友:Howdy_McGee

我们可以在脚本排队时本地化数据:

function localize_vars() {

    // Register your script so we may reference it.
    wp_register_script( \'some_handle\', \'path/to/myscript.js\' );

    $js_arr = array( \'logged_in\' => is_user_logged_in() );

    // Localize our data
    wp_localize_script( \'some_handle\', \'object_name\', $js_arr );

    // Enqueue Your Script!
    wp_enqueue_script( \'some_handle\' );
}
add_action( \'wp_enqueue_scripts\', \'localize_vars\' );
我们注册脚本,创建一个关联数组,以便它可以将其转换为对象属性,对其进行本地化,最后将其作为正常的队列。在JS文件中,您可以通过引用object_name 和关联数组索引:

jQuery( function( $ ) {
    if( object_name.logged_in ) { // True or False 
        /* ... */
    }
} );

相关推荐

PHP警告-在wp-config.php上使用未定义的常量‘force_ssl_login’‘force_ssl_admin’

我有一个困扰多年的PHP警告,我想知道是否有人能解决这个问题。以下两行警告不断记录在my error\\u日志文件中:PHP Warning: Use of undefined constant ‘FORCE_SSL_LOGIN’ - assumed \'‘FORCE_SSL_LOGIN’\' (this will throw an Error in a future version of PHP) in /home/myuser/public_html/wp-config.php on line 92