zoukankan      html  css  js  c++  java
  • 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也就是根页面的方式达到目的
  • 相关阅读:
    HTML5新增标签,表单及属性
    css3背景属性
    移动端隐藏滚动条
    css3选择符
    Hibernate读书笔记条件查询
    Hibernate读书笔记事件机制
    Hibernate读书笔记SQL查询
    Hibernate读书笔记HQL查询
    Hibernate读书笔记Hibernate知识总结
    Hibernate读书笔记缓存
  • 原文地址:https://www.cnblogs.com/yzmn/p/13056807.html
Copyright © 2011-2022 走看看