Question

Is there any way I can log a Wordpress user in given only their wp user_ID?

I'm sending users emails to confirm something and when they click on the given link to come to the website they need to be logged in to see the page I'm taking them to, so I have to log the user in and then do a header redirect.

I need a php function provided by wordpress, one that I can use in php, could you also give me any extra details as to how I can implement it (if any)

Was it helpful?

Solution

Here a function to auto-log an user (not tested) :

function auto_login() {
    if (!is_user_logged_in()) {
        //determine WordPress user account to impersonate
        $user_login = 'guest';

       //get user's ID
        $user = get_userdatabylogin($user_login);
        $user_id = $user->ID;

        //login
        wp_set_current_user($user_id, $user_login);
        wp_set_auth_cookie($user_id);
        do_action('wp_login', $user_login);
    }
}

OTHER TIPS

You have to pass 2 parameters in wp_login hook. See Wp codex

wp_set_current_user( $user_id, $user->user_login );
wp_set_auth_cookie( $user_id );
do_action( 'wp_login', $user->user_login, $user );

Create separate table to store all the links you sent and respective temp authentication code, which may be valid only for some time, then pass that temp auth code and email as a url param -

Write a code to validate user based on temp auth code, so that as soon as user clicks on email you can redirect him.

That's a really bad ideea. Consider this: You send an email to user A and B which contains the following link:

http://wordpressblog.exp/fromemail?user_id=A;
http://wordpressblog.exp/fromemail?user_id=B;

If user B replaces his user id with A's user_id then he has access to User A's account. Youd be better of constructing a hash for logging a user that way

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top