Возникли трудности с работой Site.changePassword()

У меня есть настраиваемый портал, интегрированный с настраиваемым сайтом с помощью Apex/Visualforce. Я хочу предоставить индивидуальную функцию смены пароля на странице Visualforce, которая включена для сайта/портала.

Метод статического класса сайта почти не документирован, и после того, как я прочесал сайт developerforce.com и не нашел ничего, я решил попробовать здесь. Вот метод (найденный в примере класса ChangePasswordController)

Site.changePassword(newPassword, verifyNewPassword, oldpassword);

Вот кикер. Независимо от того, какие данные я ввожу для этих значений, включая соблюдение всех политик паролей, метод просто возвращает значение null и ничего не делает. Интересно, что в тестовом методе, предоставленном Salesforce, утверждение буквально доказывает, что это так:

/**
 * An apex page controller that exposes the change password functionality
 */
public with sharing class ChangePasswordController {
    public String oldPassword {get; set;}
    public String newPassword {get; set;}
    public String verifyNewPassword {get; set;}        

    public PageReference changePassword() {
        return Site.changePassword(newPassword, verifyNewPassword, oldpassword);
    }     

    public ChangePasswordController() {}

    public static testMethod void testChangePasswordController() {
        // Instantiate a new controller with all parameters in the page
        ChangePasswordController controller = new ChangePasswordController();
        controller.oldPassword = '123456';
        controller.newPassword = 'qwerty1'; 
        controller.verifyNewPassword = 'qwerty1';                

        System.assertEquals(controller.changePassword(),null);                           
    }    
}

Заранее спасибо за любую помощь в этом!


person Adam    schedule 02.12.2011    source источник


Ответы (1)


У вас есть элемент <apex:pageMessages> на вашей странице VF? Возможно, класс Site устанавливает сообщение об ошибке, которое вы не увидите, если у вас нет этого элемента на странице.

person Jeremy Ross    schedule 02.12.2011
comment
Бинго! Вот что я получаю: Ошибка: эта операция разрешена только из активного сайта. - person Adam; 03.12.2011
comment
проблема в том, что сайт определенно активен, но находится в песочнице. Итак, я полагаю, мы должны развернуть такой код в рабочей среде, не тестируя его на самом деле?? Должен быть способ тестирования из песочницы. Или, возможно, этот актив отличается от флажка Site Active? - Еще раз спасибо за вашу помощь, Джереми! - person Adam; 03.12.2011
comment
Было бы безумием, если бы вы не могли протестировать его в песочнице. Но если у вас активен сайт, я не знаю, что еще может быть. - person Jeremy Ross; 03.12.2011
comment
Совершенно сумасшедший. Я создаю кейс прямо сейчас и дам вам знать, что я узнаю от поддержки. - person Adam; 03.12.2011
comment
Результаты пришли из службы поддержки. Поскольку у меня были пользователи, аутентифицирующиеся как пользователи портала с большим объемом данных, независимо от того, что они также находятся на моем пользовательском сайте, метод Site.changePassword() больше недействителен. Поэтому следует использовать метод System.setPassword(user.Id, newPassword). - person Adam; 07.12.2011