#c# #azure
#c# #azure
Вопрос:
Я очень новичок во всем этом. Я пытаюсь создать приложение для обслуживания таблиц для моего местного регбийного клуба. Я подключил свое приложение к базе данных sql Azure, пользователь может зарегистрироваться, однако, когда я пытаюсь войти в систему, ничего не происходит. Это мой класс для пользователя:
using System;
namespace LeighRUFCapp.Model
{
public class Users
{
// [PrimaryKey, AutoIncrement]
public string ID { get; set; }
// [MaxLength(256)]
public string Email { get; set; }
public string Password { get; set; }
}
}
ниже приведен мой xaml для страницы входа в систему;
<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="LeighRUFCapp.LoginPages.LoginPage" xmlns:yummy="clr-namespace:Xamarin.Forms.PancakeView;assembly=Xamarin.Forms.PancakeView">
<ContentPage.Content>
<StackLayout BackgroundColor="#313131">
<Image Source="logo.png" HorizontalOptions="CenterAndExpand" Margin="40" VerticalOptions="Center"></Image>
<StackLayout Orientation="Vertical" Margin="20" AnchorY="0.5" VerticalOptions="StartAndExpand">
<Entry Placeholder="Email" TextColor="White" PlaceholderColor="LightGray" Keyboard="Email" x:Name="EmailAddressEntry"></Entry>
<Entry Placeholder="Password" TextColor="White" PlaceholderColor="LightGray" IsPassword="True" x:Name="UserPasswordEntry"></Entry>
<yummy:PancakeView BackgroundColor="#EFCC45" CornerRadius="20,20,20,20" HorizontalOptions="FillAndExpand" HeightRequest="50" Margin="25,0,25,0">
<yummy:PancakeView.Shadow>
<yummy:DropShadow Color="#232323" Offset="10,10"/>
</yummy:PancakeView.Shadow>
<Button x:Name="LoginButton" Clicked="LoginButton_Clicked" Text="Login" FontSize="Large" HorizontalOptions="FillAndExpand" BorderColor="#000000" BackgroundColor="#EFCC45" FontFamily="helvetica" TextColor="#000000"></Button>
</yummy:PancakeView>
<yummy:PancakeView BackgroundColor="#EFCC45" CornerRadius="20,20,20,20" HorizontalOptions="FillAndExpand" HeightRequest="50" Margin="25,0,25,0">
<yummy:PancakeView.Shadow>
<yummy:DropShadow Color="#232323" Offset="10,10"/>
</yummy:PancakeView.Shadow>
<Button x:Name="RegisterBtn" Clicked="RegisterBtn_Clicked" Text="Register" HorizontalOptions="FillAndExpand" BorderColor="#000000" BackgroundColor="#EFCC45" FontFamily="helvetica" FontSize="Large" TextColor="#000000"></Button>
</yummy:PancakeView>
</StackLayout>
<StackLayout>
<Button x:Name="Adminbtn" Clicked="Adminbtn_Clicked" Text="Admin" TextColor="#EFCC45" FontFamily="helvetica" FontSize="Subtitle" BackgroundColor="#313131"/>
</StackLayout>
</StackLayout>
</ContentPage.Content>
</ContentPage>
и мой c # для страницы входа в систему;
using System;
using System.Collections.Generic;
using System.Linq;
using LeighRUFCapp.Homestuff;
using LeighRUFCapp.Model;
using Xamarin.Forms;
namespace LeighRUFCapp.LoginPages
{
public partial class LoginPage : ContentPage
{
public LoginPage()
{
SetValue(NavigationPage.HasNavigationBarProperty, false);
InitializeComponent();
}
private async void LoginButton_Clicked(System.Object sender, System.EventArgs e)
{
bool isEmailEmpty = string.IsNullOrEmpty(EmailAddressEntry.Text);
bool isPasswordEmpty = string.IsNullOrEmpty(UserPasswordEntry.Text);
if (isEmailEmpty || isPasswordEmpty)
{
await DisplayAlert("Error", "Your Email or Password is incorrect", "OK");
}
else
{
var user = await App.MobileService.GetTable<Users>().Where(u => u.Email == EmailAddressEntry.Text).ToListAsync();
if (user != null)
{
//if (Users.Password == UserPasswordEntry.Text)
//{
await Navigation.PushAsync(new HomePage());
/* }
else
{
//password is not being found in the table usersfor some reason
await DisplayAlert("Error", "Incorrect email or password", "OK");
}
}
else
{
await DisplayAlert("Error", "There was an error logging you in", "OK");
}*/
}
}
}
void RegisterBtn_Clicked(System.Object sender, System.EventArgs e)
{
App.Current.MainPage = new NavigationPage(new RegisterPage());
}
void Adminbtn_Clicked(System.Object sender, System.EventArgs e)
{
App.Current.MainPage = new NavigationPage(new AdminLogin());
}
}
}
Ответ №1:
Мой совет таков:
- Поместите извлечение данных за службу (WebAPI)
- Позвоните в службу из своего мобильного приложения
Это более безопасный и распространенный шаблон для мобильных приложений. Как правило, вы разрабатываете rest API с использованием JSON в качестве типа ответа. Это будет означать запуск службы в Visual Studio перед запуском приложения Xamarin (предположим, Android — если нет, вам в конечном итоге понадобится Mac), щелкнув правой кнопкой мыши. Или вы можете создать отдельный экземпляр сервиса. После отладки VS очень легко развертывается в облаке Azure.
Можете ли вы получить удаленный доступ к базе данных? Да, но вы должны отключить некоторые функции безопасности или использовать доступ через HTTPS или что-то подобное. Это не очень хороший шаблон, так как в конечном итоге вы получаете строки подключения в своем приложении. Не то чтобы мобильные приложения так просто перепроектировать, чтобы получить нужную информацию, но рекомендуется следовать рекомендациям.