web-dev-qa-db-ja.com

com_ajaxおよびJFactory :: getUser()

リクエストにcom_ajaxを使用していますが、問題が発生しました。

AJAX=リクエストを行っているユーザーがログインしているかどうかを確認しようとしています。JFactory:: getUser()を呼び出すと、ゲストユーザーID = 0が返されます。同様にJApplication-> isAdmin()はfalseを返します。これは、com_ajaxが管理者側ではなくサイト側にあるためと考えられます。

Com_ajaxを使用して、誰かが認証されているかどうかを区別する方法はありますか?または、管理者側にcom_ajaxに相当するものはありますか?管理コンポーネントで独自のAjaxを作成する必要がありますか?

2
George Sexton

URLとPHP関数で、Ajaxタスクに正しい命名規則を使用していると仮定すると、次のようになります。

helper.php

_public static function myFunctionAjax()
{

}
_

Javascriptファイル

_var request = {
    'option' : 'com_ajax',
    'module' : 'mymodule',
    'method' : 'myFunction',
    'format' : 'raw'
};

$.ajax({
    type: 'POST',
    data: request,
    success: function(response) {
        // etc
    }
});
_

myFunctionは、実行したいPHP関数(myFunctionAjax())と同じ名前を使用する必要があります。

唯一の違いは、PHP=関数には最後にAjaxが必要であることです。

次に、PHP関数内で、次のようにユーザーがログインしているかどうかを確認できます。

_public static function myFunctionAjax()
{
    $user = JFactory::getUser();

    if (!$user->guest)
    {
        // perform some magic
    }
    else
    {
        // Sorry, you must be logged in
    }
}
_
3
Lodder