Изменение атрибутов#

Blitz Identity Provider позволяет изменять атрибуты учетной записи из процедуры входа. Для этого необходимо импортировать интерфейс com.identityblitz.idp.extensions.types.JsObject и использовать методы:

  • добавление атрибутов:

    public final Builder addAttrs(final JsObject attrs)
    
  • удаление атрибутов:

    public final Builder removeAttrs(final List<String> attrNames)
    

Пример импорта и вызова методов:

import com.identityblitz.idp.extensions.types.JsObject;
/* список для удаления атрибутов */
ArrayList<String> del = new ArrayList<String>();
del.add("mail");
del.add("mobile");

/* для обновления атрибутов */
JsObject attrs = JsObject.empty;
attrs = attrs.addString("surname", "surname");
attrs = attrs.addBoolean("locked", false);
attrs = attrs.addLong("dname", 1L);

return StrategyState.ENOUGH_BUILDER().addAttrs(attrs).removeAttrs(del).build();

Пример процедуры входа с изменением атрибутов lastLoginBy и consent:

package com.identityblitz.idp.flow.dynamic;

import java.lang.*;
import java.util.*;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import com.identityblitz.idp.login.authn.flow.Context;
import com.identityblitz.idp.login.authn.flow.Strategy;
import com.identityblitz.idp.login.authn.flow.StrategyState;
import com.identityblitz.idp.login.authn.flow.StrategyBeginState;
import com.identityblitz.idp.flow.dynamic.*;
import com.identityblitz.idp.extensions.types.JsObject;
import com.identityblitz.idp.login.authn.flow.Enough;


import static com.identityblitz.idp.login.authn.flow.StrategyState.*;

public class FFmethods implements Strategy {
    private final Logger logger = LoggerFactory.getLogger("com.identityblitz.idp.flow.dynamic");
    @Override public StrategyBeginState begin(final Context ctx) {
        if(ctx.claims("subjectId") != null)
            return StrategyState.ENOUGH();
        else
            return StrategyState.MORE(new String[]{});

    }
    @Override public StrategyState next(final Context ctx) {
        JsObject attrs = JsObject.empty;
        if (ctx.appId().toString().startsWith("dyn~")) {
           lastLoginBy = "mobile";
        } else {
           lastLoginBy = "web";
        }
        attrs = attrs.addString("lastLoginBy", lastLoginBy);
        attrs = attrs.addBoolean("consent", true);
        Integer reqFactor = (ctx.user() == null) ? null : ctx.user().requiredFactor();
        if(reqFactor == null || reqFactor == 0) {
            Enough.Builder en_builder = StrategyState.ENOUGH_BUILDER().addAttrs(attrs);
                        return en_builder.build();
        } else {
            if(reqFactor == ctx.justCompletedFactor()) {
                Enough.Builder en_builder = StrategyState.ENOUGH_BUILDER().addAttrs(attrs);
                                return en_builder.build();
            } else
                return StrategyState.MORE(new String[]{});
        }
    }
}