# User Authorization

Some interfaces require user authorization to call. We divide these interfaces into multiple scope ,according to the scope of use. When user chooses to authorize scope ,after authorizing a scope, all corresponding interfaces can be used directly.

# Call The Interface to Initiate Authorization

When using the interface under a scope for the first time, a pop-up window will ask the user, "XXX is applying for the following authorizations: * (privilege description)*". If the user clicks Allow, the interface permissions for this scope can be obtained. And calling the interface is successful, otherwise it fails.

wx.login({
  success: function () {
    wx.getUserInfo()
  }
})

# Initiate authorization in advance

If you need to initiate authorization in advance to get the user's consent, you can call wx.authorize() to initiate the authorization in advance.

wx.authorize({
  scope: 'scope.record'
})

# Handle User’s Rejecting Authorization

The user may reject the authorization request initiated by the Mini Program and need to handle this situation.

wx.login({
  success: function () {
    wx.getUserInfo({
      fail: function (res) {
        // Callback errMsg of iOS and Android for rejecting authorization is not unified, which requires some compatibility processing
        if (res.errMsg.indexOf('auth deny') > -1 || 	res.errMsg.indexOf('auth denied') > -1 ) {
          // Handle user’s rejecting authorization
        }
      }
    })
  }
})

wx.authorize({
  scope: 'scope.record',
  fail: function (res) {
    // Callback errMsg of iOS and Android for rejecting authorization is not unified, which requires some compatibility processing
    if (res.errMsg.indexOf('auth deny') > -1 || 	res.errMsg.indexOf('auth denied') > -1 ) {
      // Handle user’s rejecting authorization
    }    
  }
})

# Get User Authorization Settings

The user's current authorization processing information can be obtained by calling the wx.getSetting() interface.

wx.getSetting({
  success: function (res) {
    var authSetting = res.authSetting
    if (authSetting['scope.userInfo'] === true) {
      // The user has authorized and can call the relevant API directly
    } else if (authSetting['scope.userInfo'] === false){
      // The user has rejected the authorization, and the calling of relevant API or wx.authorize will fail. You need to guide the user to the settings page and open the authorization switch.
    } else {
      // When the user has not been asked for authorization yet, calling the relevant API or wx.authorize will pop up the window to ask the user
    }
  }
})

# Guide Users to Reauthorize

If the user rejected a scope authorization request, subsequent API calls under scope will fail directly, using wx.authorize() to apply for this scope will also fail directly without asking the user by pop-ups. In this case, you need to guide the user to go to the Settings page to open the corresponding scope permission.

The entry path to the authorization page is: top right menu -> About (Mini Program name) -> top right menu -> Settings

Note: Only the scope that has applied for authorization will appear on the Settings page.

# Reset Authorization Record

If the user deletes the current Mini Program from the list, all authorized and rejected authorization records are cleared.

# Scope List

scope corresponding API description
scope.userInfo wx.getUserInfo() User Information
scope.userLocation wx.getLocation() Geographical Position
scope.werun wx.getWeRunData() WeRun Steps
scope.record wx.startRecord(), RecorderManager.start() Recording Function
scope.writePhotosAlbum wx.saveImageToPhotosAlbum() Save to Album