14

I have developed a "web part" that has to be deployed on a Sharepoint server. I need the username of the user, who has logged in the sharepoint server within the web part.

How do I get that username?

Eric Leschinski
  • 146,994
  • 96
  • 417
  • 335
Brigadier Jigar
  • 1,191
  • 3
  • 10
  • 20

6 Answers6

29

Following worked for me:

SPWeb theSite = SPControl.GetContextWeb(Context);
SPUser theUser = theSite.CurrentUser;
string strUserName = theUser.LoginName;

and check this out.

Prashant Lakhlani
  • 5,758
  • 5
  • 25
  • 39
KMån
  • 9,896
  • 2
  • 31
  • 41
13

You can use:

SPWeb web = SPControl.GetContextWeb(this.Context);
string userName = web.CurrentUser.LoginName;

or

string userName = this.Context.User.Identity.Name;

And you should check this.Context.User.Identity.IsAuthenticated as well to ensure there is a user logged in before trying to extract the username.

Mikael Svenson
  • 39,181
  • 7
  • 73
  • 79
  • I prefer the second option. Catch for me was with internal mapping to AD, it has a bunch of garbage preceeders like `0#.w|domain\username`. But otherwise the 2nd implementation worked great for me. – GoldBishop Apr 10 '14 at 16:47
  • @GoldBishop, you can get the username from the claims representation with the following code: SPClaimProviderManager mgr = SPClaimProviderManager.Local; if (mgr != null) { userName = mgr.DecodeClaim(SPContext.Current.Web.CurrentUser.LoginName).Value; } – Mikael Svenson Apr 11 '14 at 06:30
  • Interesting, ill run it through some tests and see how it interprets. But otherwise i just did `userid = this.Context.User.Identity.Name; userid = userid.Substring( userid.IndexOf( '|' ) + 1 );` and was able to seperate the garbage from what i needed for the information. – GoldBishop Apr 11 '14 at 12:37
  • Which works, but it's not garbage. It's a claims identifier and Welcome to the new world of identities :) – Mikael Svenson Apr 11 '14 at 16:17
  • depends on how you see it, for what i need the information for its garbage. i realize the information is descriptive but it is overhead text i dont need ;) – GoldBishop Apr 11 '14 at 16:50
5

Hey all, i got the answer for my question Hope this will work for you all... First add a reference to the MicrosoftSharepoint.dll file in your web part. then write using Microsoft.SharePoint;

            string username;
            string sspURL = "URL where Sharepoint is deployed";

            SPSite site = new SPSite(sspURL);

            SPWeb web = site.OpenWeb();

            SPUser user = web.CurrentUser;

            username = user.LoginName;

            site.AllowUnsafeUpdates = true;

Yours, Jigar <3

Brigadier Jigar
  • 1,191
  • 3
  • 10
  • 20
3

SPContext.Current.Web.CurrentUser

Tobias Kienzler
  • 25,759
  • 22
  • 127
  • 221
No_Nick777
  • 141
  • 1
  • 5
1

You can also get current logged user ID by _spPageContextInfo property.

 _spPageContextInfo.userId

You will get current user's ID by _spPageContextInfo. Try this may help you.

Kaushal Khamar
  • 2,097
  • 1
  • 17
  • 23
1

//don't forget to add System.DirectoryServices.AccountManagement as reference and using System.DirectoryServices.AccountManagement;

    PrincipalContext insPrincipalContext = new PrincipalContext(ContextType.Domain, "MyDomain","DC=MyDomain,DC=com");
    UserPrincipal insUserPrincipal = new UserPrincipal(insPrincipalContext);
    insUserPrincipal.Name = "*";
    PrincipalSearcher insPrincipalSearcher = new PrincipalSearcher();
    insPrincipalSearcher.QueryFilter = insUserPrincipal;
    PrincipalSearchResult<Principal> results = insPrincipalSearcher.FindAll();
    foreach (Principal p in results)
    {
        Console.WriteLine(p.Name);
    }
chinthaka
  • 69
  • 10