YAFLogo

pbwbart
  • pbwbart
  • 56.6% (Neutral)
  • YAF Forumling Topic Starter
14 years ago
Hi,

I'm trying to create a forum user with my own source. If I add a user into my own database It should automaticly be insterted into the yaf databaste. For this I referene all dll files of the yaf forum and I import the following
Quote:

imports System.Drawing
imports System.Web.Security
imports System.Web.UI.HtmlControls
imports YAF.Classes.Utils
imports YAF.Classes.Base


I created my sourcecode which looks like this:
Public ReadOnly Property PageContext() As YafContext
            Get
            End Get
End Property
 
        Protected Sub ForumRegister(Byval newEmail as string,Byval newUsername as string,Byval Password as string,Byval Question as string, Byval Answer as string,Byval Location as string, Byval Homepage as string)

                'Dim newEmail As String = Email.Text.Trim()
                'Dim newUsername As String = UserName.Text.Trim()
                Dim TimeZones as string = "60"
                                               
                Dim hashinput As String = DateTime.Now.ToString() + newEmail + Security.CreatePassword(20)
                Dim hash As String = FormsAuthentication.HashPasswordForStoringInConfigFile(hashinput, "md5")
                
                Dim status As MembershipCreateStatus               
                Dim user As MembershipUser = Membership.CreateUser(newUsername, Password, newEmail, Question, Answer, Not Pagecontext.BoardSettings.EmailVerification, status)
                
               
                ' setup inital roles (if any) for this user
                RoleMembershipHelper.SetupUserRoles(YafContext.Current.PageBoardID, newUsername)
                
                ' create the user in the YAF DB as well as sync roles...
                Dim userID As System.Nullable(Of Integer) = RoleMembershipHelper.CreateForumUser(user, YafContext.Current.PageBoardID)
                
                ' create profile
                Dim userProfile As YafUserProfile = Pagecontext.GetProfile(newUsername)
                ' setup their inital profile information
                userProfile.Location = Location
                userProfile.Homepage = HomePage
                userProfile.Save()
                
                ' save the time zone...
                YAF.Classes.Data.DB.user_save(UserMembershipHelper.GetUserIDFromProviderUserKey(user.ProviderUserKey), Pagecontext.PageBoardID, Nothing, Nothing, Convert.ToInt32(TimeZones), Nothing, _ 
                Nothing, Nothing, Nothing, Nothing)
                
                'If Pagecontext.BoardSettings.EmailVerification Then
                    ' send template email
                    'Dim verifyEmail As New YafTemplateEmail("VERIFYEMAIL")
                    
                    'verifyEmail.TemplateParams("{link}") = [String].Format("{1}{0}", YAF.Classes.Utils.YafBuildLink.GetLink(YAF.Classes.Utils.ForumPages.approve, "k={0}", hash), YAF.Classes.Utils.YafForumInfo.ServerURL)
                    'verifyEmail.TemplateParams("{key}") = hash
                    'verifyEmail.TemplateParams("{forumname}") = Pagecontext.BoardSettings.Name
                    'verifyEmail.TemplateParams("{forumlink}") = [String].Format("{0}", ForumPage.ForumURL)
                    
                    'Dim subject As String = [String].Format(Pagecontext.Localization.GetText("COMMON", "EMAILVERIFICATION_SUBJECT"), Pagecontext.BoardSettings.Name)
                    
                    'verifyEmail.SendEmail(New System.Net.Mail.MailAddress(newEmail, newUsername), subject, True)
                'End If
                
        End Sub
        
It is almost the same as the code in /admin/reguser but a little different.
When I'm debugging the source I don'n get any errors But there is a problme with the "PageContext" I can't figure out what it is doing and I actually have no idea how I can use this to make everyting work the right way. Can someone please help me?

Thanks
Sponsor

Mek
  • Mek
  • 100% (Exalted)
  • YAF Developer
14 years ago
Your PageContent property should return PageContext.Current i.e. looks like this in C#



        public YafContext ForumContext
        {
            get
            {
                return YafContext.Current;
            }
        }

UserPostedImage

"It's a case of RTFM.. the only problem being we don't have a manual!"

When I post FP:Mek in a topic, I'm leaving my footprint there so I can track it once I get into coding/supporting. (Yes I stole this off Ederon 🙂 )
pbwbart
  • pbwbart
  • 56.6% (Neutral)
  • YAF Forumling Topic Starter
14 years ago
Thanks for your Replay,

in vb.net the code looks like this
Public ReadOnly Property PageContext() As YafContext
    Get
        Return YafContext.Current
    End Get
End Property
So I missed the return statement.

But I think I'm missing something else because no user will be added.
I think I'm missing some sessions in my application like the one of the loged in user which creates the new user(admin).
I think somehow I need to simulate I'm logged in But I actually don't know which session I need exactly
Mek
  • Mek
  • 100% (Exalted)
  • YAF Developer
14 years ago
When you saying a user is not added, is it a new user to the membership, or is the user being created in membership and not yaf. Its not to do with your user session.

UserPostedImage

"It's a case of RTFM.. the only problem being we don't have a manual!"

When I post FP:Mek in a topic, I'm leaving my footprint there so I can track it once I get into coding/supporting. (Yes I stole this off Ederon 🙂 )
pbwbart
  • pbwbart
  • 56.6% (Neutral)
  • YAF Forumling Topic Starter
14 years ago
Then I'm missing something else But I don't know what it is.

Now I'm getting a nullreference on YafContest.get_Current() So I'm sure I have to set it somewhere
Quote:

System.NullReferenceException: Object reference not set to an instance of an object. Server stack trace: at YAF.Classes.Utils.YafContext.get_Current() at dValuate.EvalRunTime.ForumRegister(String newEmail, String newUsername, String Password, String Question, String Answer, String Location, String Homepage)

pbwbart
  • pbwbart
  • 56.6% (Neutral)
  • YAF Forumling Topic Starter
14 years ago
I found this manual on your wiki site
http://wiki.yetanotherforum.net/AspNetMembershipIntegration.ashx 
but when I add this source to my login script no user will by add.

 Dim YafPassword As String = FormsAuthentication.HashPasswordForStoringInConfigFile(paswoord, "md5")
            Dim YafUserID As Object = yaf.Classes.Data.DB.user_login(1, login, YafPassword)
            
            If YafUserID Is DBNull.Value Then
              Dim AdminPage As New YAF.Classes.Base.AdminPage
              'YafUserID = yaf.Classes.Data.DB.user_register(AdminPage, 1, Login, YafPassword, Membership.GetUser(Login).Email, "", "", "-300", False)
              YafUserID = yaf.Classes.Data.DB.user_register(AdminPage, 1, Login, YafPassword, email, "", "", "-300", False)
            End If
            Dim idName As String = String.Format("{0};{1};{2}", YafUserID, 1, Login)
            Httpcontext.Current.Session.Add("YAFUserId", idName)   
paswoord, login and email are clear tekst strings, the password si not encrypted.
I added db.config and all app.config settings to my portal web.config. But I don't get the feeling anything changes when someone logs in.

edit:
there is a session which will be set after login
Quote:

YAFUserId:False;1;username


"username" is de loginname of the user
pbwbart
  • pbwbart
  • 56.6% (Neutral)
  • YAF Forumling Topic Starter
14 years ago
I finnaly get somewhere, users now will be added in de user table, but still not in "prov_membership"
I sql I had to alter the storedprocudure User_save

USE [RIBW]
GO
/****** Object:  StoredProcedure [dbo].[RIBWU_yaf_user_save]    Script Date: 06/18/2009 14:06:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[RIBWU_yaf_user_save](
	@UserID				int,
	@BoardID			int,
	@UserName			nvarchar(50) = null,
	@Password			nvarchar(50) = null,
	@Email				nvarchar(50) = null,
	@TimeZone			int,
	@LanguageFile		nvarchar(50) = null,
	@ThemeFile			nvarchar(50) = null,
	@OverrideDefaultTheme	bit = null,
	@Approved			bit = null,
	@PMNotification		bit = null,
	@ProviderUserKey	nvarchar(64) = null,
	@Hash				nvarchar(64) = null,
	@Location			nvarchar(64) = null,
	@HomePage			nvarchar(64) = null
)
AS
begin
	declare @RankID int
	declare @Flags int
	
	set @Flags = 0
	if @Approved<>0 set @Flags = @Flags | 2
	
	if @PMNotification is null SET @PMNotification = 1
	if @OverrideDefaultTheme is null SET @OverrideDefaultTheme=0

	if @UserID is null or @UserID<1 begin
		if @Email = '' set @Email = null
		
		select @RankID = RankID from [dbo].[RIBWU_yaf_Rank] where (Flags & 1)<>0 and BoardID=@BoardID

		insert into [dbo].[RIBWU_yaf_User](BoardID,RankID,Name,Password,Email,Joined,LastVisit,NumPosts,TimeZone,Flags,PMNotification,ProviderUserKey) 
		values(@BoardID,@RankID,@UserName,'-',@Email,getdate(),getdate(),0,@TimeZone,@Flags,@PMNotification,@ProviderUserKey)		
	
		set @UserID = SCOPE_IDENTITY()

		insert into [dbo].[RIBWU_yaf_UserGroup](UserID,GroupID) select @UserID,GroupID from [dbo].[RIBWU_yaf_Group] where BoardID=@BoardID and (Flags & 4)<>0
	end
	else begin
		update [dbo].[RIBWU_yaf_User] set
			TimeZone = @TimeZone,
			LanguageFile = @LanguageFile,
			ThemeFile = @ThemeFile,
			OverrideDefaultThemes = @OverrideDefaultTheme,
			PMNotification = @PMNotification
		where UserID = @UserID
		
		if @Email is not null
			update [dbo].[RIBWU_yaf_User] set Email = @Email where UserID = @UserID
	end
end

and in my login source I chaged user_registration because the order of the parameters is changed a little
            Dim YafPassword As String = FormsAuthentication.HashPasswordForStoringInConfigFile(paswoord, "md5")
            Dim YafUserID As Object = yaf.Classes.Data.DB.user_login(1, login, YafPassword)
            If YafUserID Is DBNull.Value Then
              Dim AdminPage As New YAF.Classes.Base.AdminPage
              'YafUserID = yaf.Classes.Data.DB.user_register(AdminPage, 1, Login, YafPassword, Membership.GetUser(Login).Email, "", "", "-300", False)
              'YafUserID = yaf.Classes.Data.DB.user_register(AdminPage, 1, Login, YafPassword, email, "", "", "-300", False)
              YafUserID = yaf.Classes.Data.DB.user_register(1, Login, paswoord, "", email, "", "", "60", True)
            End If
            Dim idName As String = String.Format("{0};{1};{2}", YafUserID, 1, Login)
            Httpcontext.Current.Session.Add("YAFUserId", idName)           
I will work on this,
If I have some result I will tell

Edit : "RIBWU_yaf_" in my sp is my prefix, you should replace this
YAF Logo Copyright © YetAnotherForum.NET & Ingo Herbote. All rights reserved
About Us

The YAF.NET is an open source .NET forum project. YAF.NET is supported by an team of international developers who are build community by building community software.

Powered by Resharper Donate with PayPal button