diff --git src/wp-includes/admin-bar.php src/wp-includes/admin-bar.php
index 0acefd0..b7fa8fe 100644
--- src/wp-includes/admin-bar.php
+++ src/wp-includes/admin-bar.php
@@ -182,7 +182,7 @@ function wp_admin_bar_sidebar_toggle( $wp_admin_bar ) {
 function wp_admin_bar_my_account_item( $wp_admin_bar ) {
 	$user_id      = get_current_user_id();
 	$current_user = wp_get_current_user();
-	$profile_url  = get_edit_profile_url( $user_id );
+	$profile_url  = ( 0 < count( $user->allcaps ) ) ? get_edit_profile_url( $user_id ) : '#';
 
 	if ( ! $user_id )
 		return;
@@ -213,7 +213,7 @@ function wp_admin_bar_my_account_item( $wp_admin_bar ) {
 function wp_admin_bar_my_account_menu( $wp_admin_bar ) {
 	$user_id      = get_current_user_id();
 	$current_user = wp_get_current_user();
-	$profile_url  = get_edit_profile_url( $user_id );
+	$profile_url  = ( 0 < count( $user->allcaps ) ) ? get_edit_profile_url( $user_id ) : '#';
 
 	if ( ! $user_id )
 		return;
diff --git src/wp-login.php src/wp-login.php
index b9dbd61..060d8f5 100644
--- src/wp-login.php
+++ src/wp-login.php
@@ -811,7 +811,7 @@ default:
 			elseif ( is_multisite() && !$user->has_cap('read') )
 				$redirect_to = get_dashboard_url( $user->ID );
 			elseif ( !$user->has_cap('edit_posts') )
-				$redirect_to = admin_url('profile.php');
+				$redirect_to = ( 0 < count( $user->allcaps ) ) ? admin_url('profile.php') : get_home_url();
 		}
 		wp_safe_redirect($redirect_to);
 		exit();
