Skip to content

Instantly share code, notes, and snippets.

View vaygeth89's full-sized avatar

Abdulmohsen Alkhamees vaygeth89

View GitHub Profile
@vaygeth89
vaygeth89 / SignInData.cs
Created November 18, 2020 22:00
tutorial-dotnet-JWTProtectedAPI
namespace JWTProtectedAPI.ViewModels
{
public class SignInData
{
public string Email { get; set; }
public string Password { get; set; }
}
}
@vaygeth89
vaygeth89 / UserProfile.cs
Created November 18, 2020 22:17
tutorial-dotnet-JWTProtectedAPI
namespace JWTProtectedAPI.ViewModels
{
public class UserProfile
{
public string Email { get; set; }
public string Username { get; set; }
public string PhoneNumber { get; set; }
}
}
@vaygeth89
vaygeth89 / AccountController.cs
Last active November 18, 2020 22:20
tutorial-dotnet-JWTProtectedAPI GetMyProfile()
//Rest of the SignIn() and ValidateUserCredentials() methods
[HttpGet]
//We add this annotation to tell the framework this is service/route requires Authorization Claims i.e JWT
[Authorize]
[Route("my-profile")]
public async Task<ActionResult<UserProfile>> GetMyProfile()
{
try
{
//Todo add your business validation here
@vaygeth89
vaygeth89 / widget_wrapper.dart
Created July 3, 2021 13:29
Flutter Widget with AppBar Wrapper
class WidgetWithAppBarWrapper extends StatelessWidget {
final Widget Function(BuildContext) builder;
const WidgetWithAppBarWrapper({Key? key, required this.builder})
: super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
body: Builder(builder: (context) => builder(context)),
bottomNavigationBar: PersistantBottomAppBar());
@vaygeth89
vaygeth89 / main.dart
Last active October 10, 2021 18:11
main.dart
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tutorial_flutter_minimalist_authentication/cubit/user_authentication_cubit.dart';
import 'package:tutorial_flutter_minimalist_authentication/repositories/api/fake_account_api_service.dart';
import 'package:tutorial_flutter_minimalist_authentication/routes/routes.dart';
void main() {
runApp(const MyApp());
}
@vaygeth89
vaygeth89 / user_authentication_cubit.dart
Last active October 13, 2021 14:58
user_authentication_cubit.dart
import 'package:flutter/foundation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:tutorial_flutter_minimalist_authentication/exceptions/access_token_exception.dart';
import 'package:tutorial_flutter_minimalist_authentication/exceptions/business_exception.dart';
import 'package:tutorial_flutter_minimalist_authentication/exceptions/refresh_token_exception.dart';
import 'package:tutorial_flutter_minimalist_authentication/models/account/renew_access_token.dart';
import 'package:tutorial_flutter_minimalist_authentication/models/account/sign_in.dart';
import 'package:tutorial_flutter_minimalist_authentication/models/session/authentication_data.dart';
@vaygeth89
vaygeth89 / user_authentication_state.dart
Last active October 13, 2021 14:57
user_authentication_state.dart
part of 'user_authentication_cubit.dart';
@immutable
abstract class UserAuthenticationState {
const UserAuthenticationState();
}
class UserAuthenticationInitial extends UserAuthenticationState {
const UserAuthenticationInitial();
}
@vaygeth89
vaygeth89 / pubspec.yaml
Last active October 11, 2021 13:29
pubspec.yaml
name: tutorial_flutter_minimalist_authentication
description: A new Flutter project.
# The following line prevents the package from being accidentally published to
# pub.dev using `flutter pub publish`. This is preferred for private packages.
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# The following defines the version and build number for your application.
# A version number is three numbers separated by dots, like 1.2.43
# followed by an optional build number separated by a +.
@vaygeth89
vaygeth89 / protected_widget.dart
Last active October 16, 2021 16:08
protected_widget.dart
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:tutorial_flutter_minimalist_authentication/cubit/user_authentication_cubit.dart';
import 'package:tutorial_flutter_minimalist_authentication/models/session/authentication_data.dart';
class ProtectedWidget extends StatelessWidget {
final Widget Function(BuildContext, AuthenticationData) onAuthenticated;
final Widget onUnauthenticatedChild;
@vaygeth89
vaygeth89 / account_repository.dart
Created October 12, 2021 03:28
Our contract and abstract class
abstract class AccountRepository {
Future<AuthenticationData> signIn({required SignIn signIn});
Future<bool> verifyToken({required String accessToken});
Future<AuthenticationData> renewAccessToken(
{required RenewAccessToken renewAccessToken});
}