Particle.ParticleCloud.LoginWithUserAsync C# (CSharp) Méthode

LoginWithUserAsync() public méthode

Logs into ParticleCloud with the given username and password
public LoginWithUserAsync ( String username, String password, int expiresIn = 3600 ) : Task
username String The Particle account username
password String The Particle account password
expiresIn int How many seconds the token will be valid for. 0 means forever. Short lived tokens are better for security.
Résultat Task
		public async Task<Result> LoginWithUserAsync(String username, String password, int expiresIn = 3600)
		{
			if (String.IsNullOrWhiteSpace(username))
			{
				throw new ArgumentNullException(nameof(username));
			}
			if (String.IsNullOrWhiteSpace(password))
			{
				throw new ArgumentNullException(nameof(password));
			}

			client.DefaultRequestHeaders.Clear();
			client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes("particle:particle")));

			var data = new Dictionary<String, String>();
			data["grant_type"] = "password";
			data["username"] = username;
			data["password"] = password;
			data["expires_in"] = expiresIn.ToString();
			// BaseAddress did not seam to work on Linux so changed to use UriBuilder
			UriBuilder b = new UriBuilder(baseUri);
			b.Path = "/oauth/token";
			try
			{
				var postResults = await client.PostAsync(b.Uri, new FormUrlEncodedContent(data));
				if (postResults.StatusCode == System.Net.HttpStatusCode.OK)
				{
					var results = await postResults.Content.ReadAsStringAsync();
					var ret = await Task.Run(() => JsonConvert.DeserializeObject<AuthenticationResults>(results));
					if (ret != null)
					{
						if (!String.IsNullOrWhiteSpace(ret.AccessToken))
						{
							authResults = ret;
							authResults.Username = username;
							authResults.Password = password;
							FirePropertyChanged(nameof(IsAuthenticated));
							return new Result
							{
								Success = true
							};
						}
					}
				}
				else if (postResults.StatusCode == System.Net.HttpStatusCode.BadRequest)
				{
					var results = await postResults.Content.ReadAsStringAsync();
					var ret = await Task.Run(() => JsonConvert.DeserializeObject<Result>(results));
					if (ret != null)
					{
						ret.Success = false;
						return ret;
					}
				}

				return new Result
				{
					Success = false,
					Error = postResults.StatusCode.ToString()
				};
			}
			catch (HttpRequestException re)
			{
				return new Result
				{
					Success = false,
					Error = re.Message,
					Exception = re
				};
			}
		}

Usage Example

		public async Task AuthenticationTestAsync()
		{
			using (var cloud = new ParticleCloud())
			{
				var exc = Assert.Throws<ArgumentNullException>(() => { cloud.LoginWithUserAsync(null, "sadf").GetAwaiter().GetResult(); });
				Assert.AreEqual("username", exc.ParamName);
				exc = Assert.Throws<ArgumentNullException>(() => { cloud.LoginWithUserAsync("test", null).GetAwaiter().GetResult(); });
				Assert.AreEqual("password", exc.ParamName);

				var results = await cloud.LoginWithUserAsync("*****@*****.**", "test123");
				Assert.IsFalse(results.Success, "User some how authenticated?");
				Assert.AreEqual("User credentials are invalid", results.ErrorDescription);

				results = await cloud.LoginWithUserAsync(ConfigurationManager.AppSettings["Username"], ConfigurationManager.AppSettings["Password"]);
				Assert.IsTrue(results.Success, "User did not authenticate");
			}
		}
All Usage Examples Of Particle.ParticleCloud::LoginWithUserAsync