2017-02-14 7 views
0

と私IdentityModels.csを新しいデータベーステーブルを追加し、次のようになりますMVC 5コードまず今だから、ユーザーID

using System; 
using System.Data.Entity; 
using System.Security.Claims; 
using System.Security.Policy; 
using System.Threading.Tasks; 
using Microsoft.AspNet.Identity; 
using Microsoft.AspNet.Identity.EntityFramework; 
using System.Collections.Generic; 
using System.Web.Mvc; 
using System.Linq; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 

namespace Leepio.Models 
{ 
    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more. 
    public class ApplicationUser : IdentityUser 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string City { get; set; } 
     //company 
     [Display(Name = "Virkshomedsnavn")] 
     public string CompanyName { get; set; } 
     public string ZipCode { get; set; } 
     //company 
     public int NrEmployees { get; set; } 
     //company 
     public string WorkField { get; set; } 
     public string Language { get; set; } 
     //Student 
     public string University { get; set; } 
     public string StudyProgramme { get; set; } 
     public int Semester { get; set; } 
     public string GraduationDate { get; set; } 
     // 
     [AllowHtml] 
     public string Description { get; set; } 
     //Student 
     public string Skills { get; set; } 
     public string Website { get; set; } 
     public string Address { get; set; } 
     //Student 
     [DataType("date")] 
     public DateTime DateOfBirth { get; set; } 
     public virtual ICollection<Blog> Blogs { get; set; } 
     public virtual ICollection<Application> Applications { get; set; } 
     public virtual ICollection<Project> Project { get; set; } 
     public virtual IList<Experience> Experience { get; set; } 
     public virtual ICollection<Skill> Skill { get; set; } 
     public virtual IList<Education> Education { get; set; } 

     public virtual IEnumerable<Experience> ExperienceOrdered { get { return Experience.OrderByDescending(e => e.EndYear); } } 
     public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
     { 

      // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
      var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
      // Add custom user claims here 
      return userIdentity; 
     } 
    } 

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 

     public ApplicationDbContext() 
      : base("DefaultConnection", throwIfV1Schema: false) 
     { 
     } 

     public static ApplicationDbContext Create() 
     { 
      return new ApplicationDbContext(); 
     } 
     public System.Data.Entity.DbSet<Leepio.Models.Project> Projects { get; set; } 
     public System.Data.Entity.DbSet<Leepio.Models.NewsletterMails> NewsletterMails { get; set; } 
     public System.Data.Entity.DbSet<Skill> Skill { get; set; } 
     public System.Data.Entity.DbSet<Leepio.Models.Application> Applications { get; set; } 
     public System.Data.Entity.DbSet<Leepio.Models.Contract> Contracts { get; set; } 
     public System.Data.Entity.DbSet<Leepio.Models.Experience> Experience { get; set; } 
     public System.Data.Entity.DbSet<Leepio.Models.Blog> Blogs { get; set; } 
     public DbSet<Category> Categories { get; set; } 
     public DbSet<Education> Educations { get; set; } 
    } 
} 

私が何をしたいことは、新しいテーブルを追加し、コード(移行)を介して、あります私はメインのユーザーテーブルのために必要ではないデータは、2番目のものに行くことができるFacebookのから取られたデータを使用して新しいユーザーを登録するためのコードを介してユーザーテーブル(AspNetUsers)適切なuserIdを指定してください。 これを視点に入れます: ユーザーを登録すると、userID、FirstName、LastName、Email to Usersテーブルが追加され、同時にIDとLocale、GenderがFBDataテーブルに追加されます。

答えて

0

Microsoft Identityは、AspNetUserClaimsを使用して、指定したすべての追加データをApplicationUserモデルクラスに格納します。 FacebookやGoogleなどの外部認証プロバイダを使用すると、AspNetUserLoginsテーブルにProviderKeyを格納するための新しいエントリが作成されます。このキーは、ユーザーがアプリケーションに2回目でログインしているときに使用されます。

FBDataテーブルを作成する計画が必ずしも良好であるとは限りません。後でGoogle認証を追加するのはどうですか? GDataテーブルを作成しますか?

ExternalLoginCallback(ユーザーが外部認証プロバイダからページにリダイレクトされたときにトリガされる関数)のAccountControllerに最適なオプションは、facebookから受け取ったものをApplicationUserにマッピングし、ユーザーを登録にリダイレクトすることができます登録サイクルを終了するために事前に設定されたフィールドを持つフォーム。あなたが別のテーブルAspNetUserClaims_Externalで好きな場合に保存することができるすべてのごみデータが、最初にモデル化する必要があります。

チェック: https://github.com/IdentityServer/IdentityServer4.Samples/tree/dev/Quickstarts/4_ImplicitFlowAuthenticationWithExternal

0

あなたがする必要があるいくつかあります。まず、そのテーブルに必要なプロパティを持つFbDataクラスを作成できます。次に、必要なプロパティをApplicationUserクラスに追加します。あなたは

public int FbDataId { get; set; } 

FbDataのテーブルの外部キーを必要とし、また、テーブルのための仮想プロパティを追加する必要があります。

public virtual ICollection<FbData> FbDatas { get; set; } 

最終あなたIdentityContextであなたのテーブルのためにあなたにDbSetを追加します。

public DbSet<FbData> FbData { get; set; } 

クリーンなデータベースでアプリケーションを実行すると、変更内容が反映されます。

IdentityContextのOnModelCreatingクラスをオーバーライドして、生成されたIDテーブルを変更することもできます。

+0

すべてのモデルをIdentityModels.csに入れてそこに置くことができるようです。ただし、ファイルごとに1つのクラスしか持たないことをお勧めします。ただし、FbDataはIdentityContextから継承しませんが、これはApplicationDbContextの場合のみです。 –

関連する問題