Skip to content

Instantly share code, notes, and snippets.

Judah Gabriel Himango JudahGabriel

View GitHub Profile
View AccountController.cs
public class AccountController : Controller
{
private UserManager<AppUser> userManager;
private SignInManager<AppUser> signInManager;
// RavenDB.Identity provides a UserManager and SignInManager for dependency injection.
public AccountController(UserManager<AppUser> userManager, SignInManager<AppUser> signInManager)
{
this.userManager = userManager;
this.signInManager = signInManager;
View HomeController.cs
public class HomeController : Controller
{
[Authorize] // Authorize: the user must be signed in
public IActionResult Index()
{
}
[Authorize(Roles = "Admin"] // Authorize: the signed in user must be an admin
public IActionResult Index()
{
View Startup.cs
public void ConfigureServices(IServiceCollection services)
{
// Add RavenDB and identity.
services
.AddRavenDb(Configuration.GetConnectionString("RavenDbConnection")) // Create a RavenDB DocumentStore singleton.
.AddRavenDbAsyncSession() // Create a RavenDB IAsyncDocumentSession for each request.
.AddRavenDbIdentity<AppUser>(); // Use Raven for users and roles. AppUser is your class, a simple DTO to hold user data. See https://github.com/JudahGabriel/RavenDB.Identity/blob/master/Sample/Models/AppUser.cs
...
}
View UserController.js
UsersController.prototype.fetchUsers = function () {
return __awaiter(this, void 0, void 0, function () {
var results;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.usersApi.getUsers(0, 100)];
case 1:
results = _a.sent();
this.users = results;
return [2 /*return*/];
View tsconfig.json
{
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": false,
"target": "es5",
"noEmitHelpers": true,
"strictNullChecks": true
},
View UsersController.js
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t;
View UsersController.ts
class UsersController {
users: User[] = [];
constructor() {
this.fetchUsers();
}
async fetchUsers() {
var result = await this.$http.get("/users/all"); // Put this in a service, obviously. userService.get() or whatever.
this.users = result; // Yay! The UI will automatically update to show these users.
View App.ts
App.run([
"$q",
function ($q: ng.IQService) {
// Use Angular's Q object as Promise. This is needed to make async/await work properly with the UI.
// See http://stackoverflow.com/a/41825004/536
window["Promise"] = $q;
}]);
View tsconfig.json
{
"compilerOptions": {
"noImplicitAny": false,
"noEmitOnError": true,
"removeComments": false,
"sourceMap": false,
"target": "es5",
"strictNullChecks": true,
},
"compileOnSave": true,
View asyncAwait.js
// 1. Old, sucky way of doing async work: callback hell!
function myCallback(result) {
this.items = result;
}
someAjaxRequest(myCallback);
// 2. Slightly better way using Promises!
someAjaxRequest().then(results => this.items = results);
You can’t perform that action at this time.