在IBM Cloud中使用管理API创建将来的用户时无法获取属性

我正在使用应用程序ID,我在个人项目中遵循https://cloud.ibm.com/docs/services/appid?topic=appid-tutorial-roles这个提示。

我试图用以下内容调用API {{APPID_MANAGEMENT_SERVER_HOST}} / management / v4 / {{APPID_TENANT_ID}} /用户:

  "idp": "cloud_directory","idp-identity": "huynhdn@gmail.com","profile": {
    "attributes": {
      "role": "MANAGER"
    }
  }
}

我在用户个人资料中获得了将来的用户! =>确定

接下来,我呼叫{{APPID_MANAGEMENT_SERVER_HOST}} / management / v4 / {{APPID_TENANT_ID}} / cloud_directory / Users来为此用户设置密码。

  "displayName": "Test User","password": "abcd1234","emails": [
    {
      "value": "huynhdn@gmail.com","primary": true
    }
  ]
}

最后,我调用{{APPID_AUTH_SERVER_HOST}} / oauth / v4 / {{APPID_TENANT_ID}} / token与上面创建的用户获取令牌!但是当我签入应用程序ID时,属性“角色”不见了:(

为什么?或任何人都可以帮助我的另一种创建用户的方式是具有API管理的“用户名”,“密码”,“属性”!

baorry 回答:在IBM Cloud中使用管理API创建将来的用户时无法获取属性

您在上面引用的文档页面指出,为了获得将来的用户属性,用户必须通过电子邮件验证所有权。您可以通过标准方式执行此操作,也可以手动指定状态:创建CLoud Dir用户时已确认,例如

from tkinter import *
import pygame
import time

pygame.mixer.init()

window = Tk()
window.geometry('300x200')
window.title('Alarm')

#logo = PhotoImage(file='alarm.gif')

lab_1 = Label(window,text='Alarm Clock',font=('Times',20,'bold')).grid(column=200,row=0)
#lab_2=Label(window,image=logo).grid(column=300,row=0,columnspan=3)
lab_3 = Label(window,text='Hours',font=('Comic',10,'bold')).grid(column=50,row=10,columnspan=3)
lab_4 = Label(window,text='Minutes','bold')).grid(column=90,columnspan=3)

# Alarm class
class Alarm:
    alarm_id = 1
    def __init__(self,hours,minutes,ampm,sound_file):
        self.sound_file = sound_file
        # Convert hours,ampm to a timestamp
        # Save time as a timestamp
        t = time.localtime()
        t = time.strptime(f"{t.tm_year}-{t.tm_mon}-{t.tm_mday} {hours} {minutes} {ampm}","%Y-%m-%d %I %M %p")
        self.alarm_time = time.mktime(t)
        # Number of seconds to snooze
        self.snooze_time = None
        self.completed = False   # Set to True after alarm has gone off
        self.id = Alarm.alarm_id
        Alarm.alarm_id += 1

    # Every time this is called,it checks the time to see if the alarm should go off
    def check_time(self,cur_time):
        # Use alarm time or snooze time?
        on_time = self.snooze_time if self.snooze_time else self.alarm_time
        # Since might not be called when seconds is 0,check if it is with one minute of alarm time
        time_diff = cur_time - on_time
        if not self.completed and time_diff >= 0 and time_diff < 60:
            self.completed = True
            alarm_ringtone = pygame.mixer.music.load(self.sound_file)
            pygame.mixer.music.play()
        # Reset after 30 minutes - add 24 hours (daily timer)
        elif self.completed and time_diff > 1800 and time_diff < 1860:
            self.completed = False
            self.snooze_time = None
            self.alarm_time += 24 * 60 * 60

    def snooze(self,minutes):
        if self.completed and pygame.mixer.music.get_busy():
            self.snooze_time = time.time() + (minutes * 60)
            self.completed = False
            pygame.mixer.music.stop()

    # Convert to string for printing
    def __str__(self):
        id_str = f"[{self.id}]: "
        if self.completed:
            return id_str + ("Alarm in progress" if pygame.mixer.music.get_busy() else "Alarm completed")
        elif self.snooze_time:
            time_left = int(self.snooze_time - time.time())
            minutes = time_left // 60
            seconds = time_left % 60
            if minutes:
                return id_str + f"Snoozing for {minutes} minutes and {seconds} seconds"
            else:
                return id_str + f"Snoozing for {seconds} seconds"
        else:
            return id_str + f"Alarm set for {time.ctime(self.alarm_time)}"

# This list holds all alarms
all_alarms = []

# Tell all alarms to check the time
def check_alarms():
    now = time.time()
    for alarm in all_alarms:
        print(f"Checking: {alarm}");
        alarm.check_time(now)
    # Call again after 1 second
    window.after(1000,check_alarms)

# Creates a single object of the Alarm class
# Uses values from the option controls
def create_alarm():
    hours = int(hrs_opt_ctrl.get())
    minutes = int(min_opt_ctrl.get())
    ampm = tme_ctrl.get()
    alarm = Alarm(hours,"alarm.mp3")
    all_alarms.append(alarm)
    print(f"Adding: {alarm}");

# Snoozes all active alarms for 2 minutes
def snooze_current():
    for alarm in all_alarms:
        alarm.snooze(2)

but = Button(window,text='Set Alarm','bold'),command=create_alarm).grid(column=100,row=15)
snooze = Button(window,text='Snooze',command=snooze_current).grid(column=100,row=16)
opt_hrs = []
opt_min = []
opt_tme = ('AM','PM')
for i in range(1,13):
    opt_hrs.append(i)
for j in range(0,60):
    opt_min.append(j)

hrs_opt_ctrl = StringVar()
min_opt_ctrl = StringVar()
tme_ctrl = StringVar()
hrs_lab = OptionMenu(window,hrs_opt_ctrl,*opt_hrs).grid(column=70,columnspan=3)
min_lab = OptionMenu(window,min_opt_ctrl,*opt_min).grid(column=100,columnspan=3)
tme_lab = OptionMenu(window,tme_ctrl,*opt_tme).grid(column=120,columnspan=3)

# Fill with default values of current time
hrs_opt_ctrl.set(str(int(time.strftime('%I'))))
min_opt_ctrl.set(str(int(time.strftime('%M'))))
tme_ctrl.set(time.strftime('%p'))

check_alarms()
window.mainloop()
pygame.mixer.music.stop()
本文链接:https://www.f2er.com/3096626.html

大家都在问