Xamarin開發登錄示例


Xamarin開發登錄示例

登錄視圖模型:

class LoginViewModel { public string Email { get; set; } public string Password { get; set; } public ICommand LoginCommand { get { return new Command(async () => { ApiServices apiServices = new ApiServices(); var accesstoken = await apiServices.LoginUserAsync(Email, Password); Settings.AccessToken = accesstoken; }); } } public LoginViewModel() { Email = Settings.Username; Password = Settings.Password; } } 

登錄:

public async Task<string> LoginUserAsync(string email, string password) { var client = new HttpClient(); var keyValues = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("username", email), new KeyValuePair<string, string>("password", password), new KeyValuePair<string, string>("grant_type", "password") }; var request = new HttpRequestMessage( HttpMethod.Post, "linktotoken"); request.Content = new FormUrlEncodedContent(keyValues); var reponse = await client.SendAsync(request); var jwt = await reponse.Content.ReadAsStringAsync(); JObject jwtDyanmic = JsonConvert.DeserializeObject<dynamic>(jwt); var accessToken = jwtDyanmic.Value<string>("access_token"); var accessTokenExpiration = jwtDyanmic.Value<DateTime>(".expires"); Settings.AccessTokenExpiration = accessTokenExpiration; Debug.WriteLine(jwt); return accessToken; } 

LoginPage.xaml:

<ContentPage.BindingContext> <vm:LoginViewModel/> </ContentPage.BindingContext> <StackLayout VerticalOptions="Center"> <Entry Text="{Binding Email}" /> <Entry Text="{Binding Password}" /> <Button Command="{Binding LoginCommand}" Text="Login/Signin" /> </StackLayout> 

App.xaml.cs

public App () { InitializeComponent(); SetMainPage(); } private void SetMainPage() { if (!string.IsNullOrEmpty(Settings.AccessToken)) { if (DateTime.UtcNow.AddHours(1) > Settings.AccessTokenExpiration) { var vm = new LoginViewModel(); vm.LoginCommand.Execute(null); } MainPage = new NavigationPage(new GSMUnitsPage()); } else if(!string.IsNullOrEmpty(Settings.Username) && !string.IsNullOrEmpty(Settings.Password)) { MainPage = new NavigationPage(new LoginPage()); } else { MainPage = new NavigationPage(new RegisterPage()); } }



此事例關鍵是要關注一個問題,它不同於安卓原生的方式登陸成功后關閉登陸頁面,這里是采用重新指定mainpage也就是根頁面的方式達到目的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM