Algorithm undirected graph to directed strongly connected graph
The idea is that if we find a cycle in $G$, then we can orient its edges so that the nodes in the cycle will be all strongly connected. The cycle can then be collapsed into a single node. If the graph had no bridges the new graph will also have no bridges and this procedure can be repeated. Eventually, you will be left with a single node, meaning that the whole graph is a single strongly connected component, as desired.

More precisely, you can iteratively do the following: 


Find a cycle $C $in $G$;
Orient the edges of $C = \langle u_1, u_2, \dots, u_k, u_{k+1} = u_1 \rangle$ in an arbitrary but consistent direction w.r.t. $C$. For example, for $i=1, \dots, k$ orient $(u_i, u_{i+1})$ towards $u_{i+1}$; 
Orient the chords of $C$ in an arbitrary direction.
Identify the vertices in $C$, possibly creating parallel edges (but ignoring self-loops). This means replacing $u_1, \dots, u_k$ with a new super-vertex $\overline{u}$. For every edge $(x,y)$ where $x \in C$ and $y \not\in C$, add a new edge $(\overline{u}, y)$.
Repeat until a single vertex is left in $G$.


Notice that if there are two or more vertices left in $G$ then there must still be a cycle (otherwise there is a bridge that was also bridge in the original graph). This means that you will eventually be left with a single vertex. When this happens, all edges in the original graph $G$ must have been assigned a direction and you are done.

If you think of using the above algorithm while performing a single DFS visit to discover the cycles to contract, then all the cycles $C$ will be of the form $\langle u_1, \dots, u_k, u_{k+1} = u_1 \rangle$, where for $i=1,\dots,k-1$, $u_{i}$ is the parent of $u_{i+1}$ in the DFS tree, and $(u_k, u_1)$ is a back-edge. If you use the above choice for the orientation of the edges of $C$, then this is equivalent to this simpler algorithm:


Perform a DFS visit of $G$ from an arbitrary vertex $r$ to obtain a tree $T$.
Orient all the edges of $T$ away from $r$.
Orient the edges not in $T$ towards $r$ (notice that this is well defined since there will be no edges between two nodes at the same depth in $T$).


You can also give a direct proof that the orientation $G'$ computed by this second algorithm is a strongly-connected graph. It is clear that there is a path from $r$ to any other vertex in $G'$. The following claim implies the converse.

Claim: Let $(u,v)$ be an edge of $T$, with $u$ being the parent of $v$. There is a path from $v$ to $u$ in $G'$.

Proof: 
Since $(u,v)$ is not a bridge, there must be a cycle of the form $C = \langle u_1 = u, u_2 = v, u_3, \dots, u_k, u_{k+1} = u_1 \rangle$.
Let $i$ be the smallest index in $\{1, \dots, k\}$ such that $u_i$ lies in the subtree $T_v$ of $T$ rooted at $v$ and $u_{i+1} \not\in T_v$ (this edge must always exist).
Since $u_i \in T_v$, there is a (possibly empty) directed path $P$ from $v$ to $u_i$ in $G'$.
Since $u_{i+1}$ is an ancestor of $v$ and $u_{i+1} \not\in T_v$, $u_{i+1}$ must be an ancestor of $u$ (possibly $u$ itself). This means that there is a (possibly empty) directed path $Q$ from $u_{i+1}$ to $u$ in $G'$.
Finally, $(u_i, u_{i+1})$ is not a tree edge, hence it is directed towards $u_{i+1}$. This means that $P \circ (u_i, u_{i+1}) \circ Q$ is a path from $v$ to $u$ in $G'$ (where $\circ$ denotes concatenation). $\quad\square$